Le site tourne depuis une semaine, et Bruna a une demande : afficher sur chaque fiche combien de portions il reste aujourd'hui. Pipin a déjà ajouté le champ à l'entité Plat (portions, 10 par défaut). Il ne reste « qu'à » mettre la base à jour.
Sauf que cette base n'est plus vide : elle contient la carte, en service. L'aperçu est dans la même situation — ouvrez la fiche du ragoût : la colonne n'existe pas encore.
Votre mission
Ajoutez la colonne des portions sans casser la cave :
- générez la migration (
doctrine:migrations:diff), puis jouez-la (doctrine:migrations:migrate) ; - si elle échoue, lisez le message, corrigez la migration, et rejouez-la ;
- les plats déjà à la carte doivent commencer avec 10 portions ;
- à la fin,
doctrine:schema:validatedoit confirmer que la base correspond exactement aux entités ; - et l'on doit pouvoir revenir en arrière (
doctrine:migrations:migrate prev) sans perdre un plat.
« Chez moi, ça marche »
Une migration qui passe sur votre base de développement, vide ou presque, peut échouer sur la base de production, pleine. C'est le piège des migrations, et la raison pour laquelle on les relit et on les teste sur des données réalistes.
Une colonne obligatoire en deux temps
Ajouter une colonne obligatoire à une table remplie se fait souvent en deux migrations :
- ajouter la colonne avec une valeur pour les lignes existantes ;
- une fois les données en place, retirer ce qui ne servait qu'à la transition.
Chaque étape est simple, relisible, et se défait.