laravel

Laravel Comment ajouter une colonne à une table existante

Laravel Comment ajouter une colonne à une table existante

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 davantage votre application.

Très souvent, les nouveaux développeurs Laravel doivent exécuter leurs migrations, mais ils ne s'assurent pas que les migrations peuvent revenir en arrière et migrer plusieurs fois sans rien casser.

Bien que ce ne soit pas notre objectif, je pense qu'il était important de préciser qu'avant d'aborder notre problème.

Ce qui suit est un problème courant que les nouveaux développeurs Laravel essaieront de faire lorsqu'ils souhaitent ajouter une nouvelle colonne à une table existante.

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

fonction publique up()

Schema::create('organisations', fonction ($table)
$table->increments('id');
$table->string('nom')->nullable();
$table->text('about')->nullable();
);

Cela créera une nouvelle table pour eux. Et pour que cela soit propre, vous devez également ajouter la fonction down et simplement supprimer toute votre table dans ce cas. La fonction down sera exécutée lorsque vous souhaitez annuler votre migration.

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

fonction publique up()

Schema::create('organisations', fonction ($table)
$table->integer('taille')->nullable();
);

Ils espèrent ajouter une nouvelle taille de colonne à la table existante.

Voyons maintenant ce qui se passe et comment éviter que cela ne se reproduise.

Solution

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

La fonction real up devrait donc ressembler à ceci :

fonction publique up()

Schema::table('organisations', fonction ($table)
$table->integer('taille')->nullable();
);

Et la fonction down serait comme ceci :

fonction publique down()

Schema::table('organisations', function($table)
$table->dropColumn('taille');
);

Ma suggestion personnelle est qu'après avoir créé votre nouveau fichier de migration (modification), procédez comme suit :

Une autre astuce

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

Un autre conseil que je peux vous donner est de prévoir où vous souhaitez 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 pour que votre code final ressemble à ceci :

fonction publique up()

Schema::table('organisations', fonction ($table)
$table->integer('taille')->after('nom')->nullable();
);

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

Comment changer les boutons gauche et droit de la souris sur un PC Windows 10
Il est tout à fait normal que tous les appareils de souris d'ordinateur soient conçus de manière ergonomique pour les droitiers. Mais il existe des so...
Émulez les clics de souris en survolant à l'aide de la souris sans clic dans Windows 10
L'utilisation d'une souris ou d'un clavier dans la mauvaise posture d'une utilisation excessive peut entraîner de nombreux problèmes de santé, notamme...
Ajoutez des gestes de souris à Windows 10 à l'aide de ces outils gratuits
Ces dernières années, les ordinateurs et les systèmes d'exploitation ont considérablement évolué. Il fut un temps où les utilisateurs devaient utilise...