Laravel 5 prend désormais en charge la modification d'une colonne; voici un exemple de la documentation officielle:
Schema::table('users', function($table)
{
$table->string('name', 50)->nullable()->change();
});
Source: http://laravel.com/docs/5.0/schema#changing-columns
Laravel 4 ne prend pas en charge la modification des colonnes, vous devrez donc utiliser une autre technique telle que l'écriture d'une commande SQL brute. Par exemple:
// getting Laravel App Instance
$app = app();
// getting laravel main version
$laravelVer = explode('.',$app::VERSION);
switch ($laravelVer[0]) {
// Laravel 4
case('4'):
DB::statement('ALTER TABLE `pro_categories_langs` MODIFY `name` VARCHAR(100) NULL;');
break;
// Laravel 5, or Laravel 6
default:
Schema::table('pro_categories_langs', function(Blueprint $t) {
$t->string('name', 100)->nullable()->change();
});
}
->nullable(false)
vous permettra de modifier à nouveau la colonne.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 du package doctrine / dbal :
Maintenant, dans votre migration, vous pouvez le faire pour rendre la colonne nullable:
Vous vous demandez peut-être comment annuler cette opération. Malheureusement, cette syntaxe n'est pas prise en charge:
Voici la syntaxe correcte pour annuler la migration:
Ou, si vous préférez, vous pouvez écrire une requête brute:
J'espère que vous trouverez cette réponse utile. :)
la source
nullable(false)
m'a évité de me tirer les cheveux, car celanullable()
n'est pas bien documenté et il n'y a pas denotNull()
fonction.SET FOREIGN_KEY_CHECKS = 0
donne une erreur. vous devrez probablement modifier les contraintes de la table à l'aide d'une requête brute. voir ici: postgresql.org/docs/current/static/sql-altertable.htmlJe suppose que vous essayez de modifier une colonne sur laquelle vous avez déjà ajouté des données, il est donc impossible de supprimer une colonne et de l'ajouter à nouveau en tant que colonne nullable sans perdre de données. Nous allons
alter
la colonne existante.Cependant, le générateur de schéma de Laravel ne prend pas en charge la modification des colonnes autre que le changement de nom de la colonne. Vous devrez donc exécuter des requêtes brutes pour les faire, comme ceci:
Et pour vous assurer que vous pouvez toujours annuler votre migration, nous ferons
down()
de même.Une note est que puisque vous convertissez entre nullable et non nullable, vous devrez vous assurer de nettoyer les données avant / après votre migration. Faites donc cela dans votre script de migration dans les deux sens:
la source
query
parstatement
down
fonction du deuxième bloc de code, l'instruction SQL doit se terminer parNOT NULL
. (Ladown
fonction dans le troisième exemple est correcte.)Il est la migration complète pour Laravel 5 :
Le fait est que vous pouvez supprimer
nullable
en passantfalse
comme argument.la source
S'il vous arrive de changer les colonnes et de trébucher
puis installez simplement
composer require doctrine/dbal
la source
Ajout à la réponse de Dmitri Chebotarev, comme pour Laravel 5+.
Après avoir requis le paquet doctrine / dbal :
Vous pouvez ensuite effectuer une migration avec des colonnes nullables, comme ceci:
Pour annuler l'opération, procédez comme suit:
la source
Ajout à Dmitri Chebotarev Answer,
Si vous souhaitez modifier plusieurs colonnes à la fois, vous pouvez le faire comme ci-dessous
la source
Essayez-le:
la source
->change
à la fin et pour le mentionner seulement Laravel 5+composer require doctrine/dbal
Pour Laravel 4.2, la réponse d'Unnawut ci-dessus est la meilleure. Mais si vous utilisez le préfixe de table, vous devez modifier un peu votre code.
Et pour vous assurer que vous pouvez toujours annuler votre migration, nous ferons
down()
de même.la source