Guida

Migrazioni del database

Mantieni le modifiche allo schema del database chiare, ordinate e registrate con il sistema di migrazioni integrato.

Crea una migrazione nell’applicazione

Le migrazioni appartengono all’applicazione e, per convenzione, si trovano in App\Database\Migrations. Ogni classe ha un identificatore stabile nel formato YYYYMMDDHHMMSS_description e applica le modifiche allo schema in up(Schema $schema). Dopo che una migrazione è stata applicata, non modificarne più l’identificatore.

example.php
<?php

declare(strict_types=1);

namespace App\Database\Migrations;

use Lemonade\Framework\Database\Migration\MigrationInterface;
use Lemonade\Framework\Database\Schema\Schema;

final class CreateUsersTable implements MigrationInterface
{
    public static function identifier(): string
    {
        return '20260908090000_create_users';
    }

    public function up(Schema $schema): void
    {
        $schema->create('users', static function ($table): void {
            $table->id();
            $table->string('email', 255);
            $table->string('password', 255);
        });
    }
}

Registra esplicitamente le classi di migrazione

Registra ogni migrazione come class-string in AppServiceProvider. MigrationRegistry valida e ordina l’identificatore senza istanziare la migrazione. Le migrazioni già applicate e i controlli di stato quindi non richiedono la creazione delle relative istanze né la risoluzione delle dipendenze del costruttore.

example.php
<?php

declare(strict_types=1);

namespace App\Providers;

use App\Database\Migrations\CreateUsersTable;
use Lemonade\Framework\Container\ContainerInterface;
use Lemonade\Framework\Core\ServiceProviderInterface;
use Lemonade\Framework\Database\Migration\MigrationRegistry;

final class AppServiceProvider implements ServiceProviderInterface
{
    public function register(ContainerInterface $container): void
    {
        $registry = $container->get(MigrationRegistry::class);

        $registry->register(CreateUsersTable::class);
    }
}

Esegui le migrazioni e controllane lo stato

Esegui le migrazioni in attesa tramite la CLI. database:migrate:status mostra le migrazioni applicate e in attesa, oltre agli identificatori presenti nella cronologia che non risultano più registrati nell’applicazione.

example.php
vendor/bin/lemonade database:migrate
vendor/bin/lemonade database:migrate:status

Mantieni stabile la cronologia delle migrazioni applicate

Le migrazioni sono unidirezionali. Lemonade non fornisce rollback, down(), batch, checksum, discovery automatica dal filesystem o transazioni DDL automatiche. Le operazioni di schema disponibili dipendono dal driver e dal dialetto del database configurati.