Laravel comment ajouter une colonne à un tableau existant

Laravel comment ajouter une colonne à un tableau existant

Problème

L'ajout de nouvelles colonnes à vos migrations Laravel est une chose courante. Les applications sont censées être évolutives, ce qui signifie que l'ajout de nouvelles fonctionnalités développe votre application plus loin.

Très souvent, les nouveaux développeurs de Laravel ont besoin d'exécuter leurs migrations, mais ils ne s'assurent pas que les migrations peuvent recalculer et migrer plusieurs fois sans rien casser.

Bien que ce ne soit pas notre objectif, je pense qu'il était important de dire que avant de nous diriger vers notre problème.

Ce qui suit est un problème courant que les nouveaux développeurs Laravel tenteront de faire lorsqu'ils souhaiteront ajouter une nouvelle colonne à un tableau existant.

Donc à ce stade, ils ont déjà fait quelque chose comme:

Fonction publique UP ()

Schéma :: create ('organisations', fonction ($ table)
$ table-> incréments ('id');
$ table-> String ('name') -> nullable ();
$ table-> text ('À propos') -> nullable ();
);

Cela créera une nouvelle table pour eux. Et pour rendre cela propre, vous devez également ajouter la fonction Down et simplement déposer toute votre table dans ce cas. La fonction Down sera exécutée lorsque vous souhaitez retrousser votre migration.

Sautant à travers tout cela, le vrai problème apparaît lorsqu'ils oublient une colonne et ils veulent ajouter cela par la suite afin qu'ils créent un nouveau fichier de migration (classe), essayez d'exécuter quelque chose comme:

Fonction publique UP ()

Schéma :: create ('organisations', fonction ($ table)
$ table-> entier ('taille') -> nullable ();
);

Ils espèrent ajouter une nouvelle taille de colonne au tableau existant.

Voyons maintenant ce qui se passe et comment empêcher que cela ne se reproduise.

Solution

Le principal problème ici est ce que les nouveaux développeurs ont souvent tendance à manquer de remarquer qui est le nom de méthode statique du schéma . Vous n'utilisez Créer que lorsque vous créez initialement votre table. Si vous devez mettre à jour davantage votre table à tout moment, vous souhaitez utiliser un tableau à la place.

La fonction réelle devrait donc être ceci:

Fonction publique UP ()

Schema :: Table ('Organizations', fonction ($ Table)
$ table-> entier ('taille') -> nullable ();
);

Et la fonction Down serait comme ceci:

Fonction publique Down ()

Schema :: Table ('Organizations', fonction ($ Table)
$ Table-> DropColumn ('Size');
);

Ma suggestion personnelle est qu'après avoir créé votre nouveau fichier de migration (modifiant), faites ce qui suit:

  • Exécuter la migration
  • Vérifiez si la colonne est ajoutée au tableau
  • Rollback La migration en exécutant PHP Artisan Migrate: Rollback
  • Assurez-vous que rien ne se passe
  • Répétez à nouveau les étapes 2 et 3 pour vous assurer que vous pouvez fermer le cercle complet de Migratio
  • n

Une autre astuce

Cela sera utile à un stade ultérieur si vous souhaitez automatiser votre déploiement et que votre script doit exécuter un recul.

Un autre conseil que je peux vous donner est de planifier où vous voulez placer votre colonne. Juste en faisant cela, Laravel placera votre nouvelle colonne à la fin, probablement après la colonne Updated_at. (La plupart des tables ont ceci)

Vous souhaitez utiliser une méthode après donc votre code final ressemblerait à ceci:

Fonction publique UP ()

Schema :: Table ('Organizations', fonction ($ Table)
$ table-> entier ('size') -> after ('name') -> nullable ();
);

Dans ce cas, Laravel placera votre nouvelle colonne juste après la colonne de nom afin qu'elle soit belle et est bien mieux organisée.