Migrations de base de données
Gardez les modifications du schéma de base de données claires, ordonnées et enregistrées grâce au système de migrations intégré.
Créer une migration dans l’application
Les migrations appartiennent à l’application et se trouvent généralement dans App\Database\Migrations. Chaque classe possède un identifiant stable au format YYYYMMDDHHMMSS_description et applique les changements de schéma dans up(Schema $schema). Une fois une migration appliquée, ne modifiez plus son identifiant.
<?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);
});
}
}Enregistrer explicitement les classes de migration
Enregistrez chaque migration comme class-string dans AppServiceProvider. MigrationRegistry valide et trie l’identifiant sans instancier la migration. Les migrations déjà appliquées et les contrôles de statut n’ont donc pas besoin de créer leurs instances ni de résoudre leurs dépendances de constructeur.
<?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);
}
}Exécuter les migrations et vérifier leur statut
Exécutez les migrations en attente via la CLI. database:migrate:status affiche les migrations appliquées et en attente, ainsi que les identifiants présents dans l’historique mais qui ne sont plus enregistrés dans l’application.
vendor/bin/lemonade database:migrate
vendor/bin/lemonade database:migrate:statusConserver un historique de migrations stable
Les migrations sont unidirectionnelles. Lemonade ne fournit ni rollback, ni down(), ni batches, ni checksums, ni découverte automatique dans le système de fichiers, ni transactions DDL automatiques. Les opérations de schéma disponibles dépendent du driver et du dialecte de base de données configurés.