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.
<?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.
<?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.
vendor/bin/lemonade database:migrate
vendor/bin/lemonade database:migrate:statusMantieni 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.