Documentation · Chapitre 07

Versionner la structure
comme le code.

Une migration est une petite étape ordonnée qui sait appliquer un changement avec up() et l’annuler avec down().

Nous remplaçons le stockage temporaire de reading-list par SQLite, sans changer l’objectif de l’application.

Créez la migration

phpaml — zsh
aml make:migration create_books_table

AML ajoute un préfixe temporel au fichier dans runtime/database/migrations. Cet ordre empêche deux changements d’être appliqués au hasard.

Décrivez la table

phpaml — zsh
use AML\Data\Connection;
use AML\Data\Migrations\Migration;
use AML\Data\Schema\{Schema, Table};

return new class extends Migration {
    public function up(Connection $connection): void
    {
        (new Schema($connection))->create('books', function (Table $table): void {
            $table->id();
            $table->string('title', 180);
            $table->string('author', 120);
            $table->timestamps();
        });
    }

    public function down(Connection $connection): void
    {
        (new Schema($connection))->dropIfExists('books');
    }
};

Appliquez, inspectez, annulez

phpaml — zsh
aml data:migrate
aml data:status
aml data:rollback --steps 1
aml data:migrate

Le migrateur mémorise ce qui a déjà été exécuté : relancer data:migrate n’applique que les fichiers en attente. Un verrou empêche deux processus de modifier le schéma simultanément.

Rollback signifie perte possible

Supprimer une table avec down() supprime aussi ses lignes. Utilisez le rollback pour le développement contrôlé et sauvegardez toujours la production.