Migrations Doctrine dans Symfony : générer, relire et jouer
Les migrations Doctrine, dans Symfony, écrivent chaque changement de schéma dans un fichier PHP versionné, relu, puis joué une seule fois par base.
final class Version20260419090000 extends AbstractMigration { public function getDescription(): string { return 'Inscriptions : la date du rappel de la veille'; } public function up(Schema $schema): void { $this->addSql('ALTER TABLE inscription ADD COLUMN rappel_envoye_le DATETIME DEFAULT NULL'); } public function down(Schema $schema): void { // Le chemin du retour : reconstruire la table sans la colonne, en gardant ses lignes. } }
doctrine:schema:update --force modifie les tables sur-le-champ, sans trace ni retour possible. doctrine:migrations:diff compare plutôt les entités au schéma et génère une classe : up() pour avancer, down() pour revenir. doctrine:migrations:migrate joue celles qui manquent, dans l'ordre de leur nom daté, et note chacune dans doctrine_migration_versions ; migrate prev annule la dernière. Le piège : Doctrine devine, il ne sait pas, et une migration se relit avant d'être jouée. Un down() qui supprime une table puis la recrée, raccourci tentant sous SQLite qui reconstruit les tables pour retirer une colonne, s'exécute sans erreur : la commande répond « OK », et les lignes ont disparu.
Les exercices font générer et jouer la première migration du site de la taverne, réparer une migration d'allergènes dont l'annulation vide le garde-manger, puis écrire les migrations des soirées de contes et de la date de rappel de leurs inscriptions.
4 exercices font travailler cette notion, en écrivant du code dans le navigateur.
Dans les parcours
- La première migration Symfony pour les devs PHP · chapitre 8 : Retour à la cave
- 🐉 Boss : le cellier effondré Symfony pour les devs PHP · chapitre 8 : Retour à la cave
- Le cahier des charges Symfony pour les devs PHP · chapitre 12 : Le grand service
- La veille au soir Symfony pour les devs PHP · chapitre 12 : Le grand service
Notions voisines
DébogageManyToManyRequêtes N+1PaginationValidationCommande consoleMailer