Comment modifier un type de colonne avec le générateur de schéma Laravel?
J'ai besoin de changer deux champs de type entier à la clé étrangère. Comment puis-je construire ma migration de le faire?
Schema::create('messages', function($table)
{
$table->increments('id');
$table->integer('sender');
$table->integer('recipient');
$table->string('title');
$table->longtext('body');
$table->timestamps();
$table->softDeletes();
$table->integer('regarding');
});
Je vais changer de sender
à sender_id
recipient
à recipient_id
et regarding
à regarding_id
.
source d'informationauteur mike
Vous devez vous connecter pour publier un commentaire.
Ne pense pas trop à ce sujet, je suis en utilisant le code suivant. Ici, j'ai changer le type de données varchar texte.
Je suis tombé sur un problème similaire avoir besoin de changer une colonne de type chaîne de caractères en entier. J'ai géré ce à l'aide de deux migrations (avec un RAW instruction sql dans chaque) pour obtenir la solution.
En plus cela fonctionne avec Postgres et MySQL car nous étions au milieu d'un transfert.
De la première migration:
La deuxième migration:
À penser à ce sujet maintenant, il pourrait être simplifié à une seule migration.
Je viens d'être confronté au même problème et la solution la plus rapide est tout simplement de modifier la structure de colonne sur la base de données et puis aussi modifier la version d'origine de la migration afin de refléter les changements effectués sur la DB.
De cette façon, si la migration est jamais roulé en arrière, puis de nouveau les champs appropriés seront créés. Je ne vois aucun inconvénient à cela tant que vous assurez-vous de modifier avec précision la migration.
Si vous souhaitez modifier le type de la colonne ou de la modification de durée, etc, il suffit d'appeler le
change()
méthodeet de renommer la colonne
Vous pouvez essayer de renommer la colonne de quelque chose de temporaire avec
$table->renameColumn('from', 'to');
puis créer une nouvelle colonne avec la norme de création de ligne pour les clés étrangères, et enfin copier des données à partir temporaire de la colonne à la nouvelle fonction de contrôleur.Devrait fonctionner, mais je n'ai pas l'essayer, n'ont pas un besoin.
Je voudrais juste laisser tomber et puis les ajouter de nouveau comme un type différent.
Dans Laravel 5, vous pouvez utiliser une fermeture comme ci-dessous. Cela devrait le faire dans une base de données de façon agnostique, donc pas besoin d'avoir de si-états de la vérification pour les types de base de données.
(Notez que vous devrez peut-être compositeur besoin doctrine/dbal pour ce faire.)
J'ai eu un problème similaire d'essayer de changer de type de colonne à partir du texte en binaire. J'ai été faire une erreur lorsque vous essayez d'exécuter l'migrer de commande.
J'ai fini par le résoudre de cette façon: