Guide

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.

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);
        });
    }
}

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.

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);
    }
}

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.

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

Conserver 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.