Laravel Migration de Changement à Faire une Colonne Nullable
J'ai créé une migration avec unsigned user_id
. Comment puis-je modifier user_id
dans une nouvelle migration de le rendre également nullable()
?
Schema::create('throttle', function(Blueprint $table)
{
$table->increments('id');
//this needs to also be nullable, how should the next migration be?
$table->integer('user_id')->unsigned();
}
Vous devez vous connecter pour publier un commentaire.
Laravel 5 prend maintenant en charge la modification d'une colonne; voici un exemple tiré de la documentation officielle:
Source: http://laravel.com/docs/5.0/schema#changing-columns
Laravel 4 ne prend pas en charge la modification de colonnes, de sorte que vous aurez besoin d'utiliser une autre technique, comme l'écriture d'une crue de la commande SQL. Par exemple:
DB::statement
et SQL brut... Mais peut-être que je vais essayer plus tard... Thxchange
méthode n'est pas reconnue et ne fonctionnent pas.J'ai installer Laravel 5.7.Voici la réponse complète pour le futur lecteur. Notez que cela n'est possible que dans Laravel 5+.
Tout d'abord, vous aurez besoin de la doctrine/dbal package:
Maintenant dans votre migration, vous pouvez le faire pour rendre la colonne nullable:
Vous demandez peut-être comment faire pour revenir à cette opération. Malheureusement, cette syntaxe n'est pas pris en charge:
C'est la syntaxe correcte pour revenir à la migration:
Ou, si vous préférez, vous pouvez écrire un raw requête:
J'espère que vous trouverez cette réponse utile. 🙂
nullable(false)
m'a sauvé de tirer mes cheveux, parce quenullable()
n'est pas bien documentée, et il n'y a pas denotNull()
fonction.SET FOREIGN_KEY_CHECKS = 0
donne une erreur. vous aurez probablement besoin de modifier le tableau des contraintes propres à l'aide d'un raw de la requête. voir ici: postgresql.org/docs/current/static/sql-altertable.htmlJe suppose que vous tentez de modifier une colonne que vous avez déjà ajouté des données sur, afin de déposer la colonne et l'ajout de nouveau comme une colonne nullable n'est pas possible sans perte de données. Nous allons
alter
la colonne existante.Cependant, Laravel du générateur de schéma ne prend pas en charge la modification des colonnes autres que de renommer la colonne.
De sorte que vous aurez besoin pour exécuter des premières requêtes de les faire, comme ceci:
Et assurez-vous de pouvoir encore la restauration de la migration, nous allons faire la
down()
ainsi.Une remarque, c'est que depuis que vous êtes à la conversion entre les valeurs null et non pas les valeurs null, vous devez assurez-vous de nettoyer les données avant et après la migration. Donc le faire dans le script de migration de deux façons:
query
parstatement
down
fonction dans le deuxième bloc de code, l'instruction SQL doit se terminer parNOT NULL
. (Ledown
fonction dans le troisième exemple est correct).Il es la migration complète pour Laravel 5:
Le point est, vous pouvez supprimer
nullable
en passantfalse
comme un argument.Si vous arrive de modifier les colonnes et suis tombé sur
ensuite il suffit d'installer
composer require doctrine/dbal
Ajoutant à Dmitri Chebotarev réponse, comme pour Laravel 5+.
Après nécessitant la doctrine/dbal package:
Vous pouvez ensuite faire une migration avec nullable colonnes, comme suit:
Pour rétablir le fonctionnement, n':
Ajoutant à Dmitri Chebotarev Réponse,
Si vous voulez modifier plusieurs colonnes à la fois , vous pouvez le faire comme ci-dessous
Essayer:
->change
à la fin et de le mentionner Laravel 5+ seulementPour Laravel 4.2, Unnawut la réponse ci-dessus est le meilleur. Mais si vous utilisez le préfixe de la table, alors vous avez besoin de modifier votre code un peu.
Et assurez-vous de pouvoir encore la restauration de la migration, nous allons faire la
down()
ainsi.