web-dev-qa-db-fra.com

Laravel les migrations changent la valeur par défaut de la colonne

J'ai une table avec une valeur par défaut déjà assignée. Pour un exemple, nous pouvons regarder ce qui suit:

Schema::create('users', function (Blueprint $table) {
            $table->increments('id')->unsigned();
            $table->integer('active')->default(1);
        });

Je veux maintenant changer ma valeur par défaut sur le champ actif. Je compte faire quelque chose comme ça:

if (Schema::hasTable('users')) {
        Schema::table('users', function (Blueprint $table) {
            if (Schema::hasColumn('users', 'active')) {
                $table->integer('active')->default(0);
            }
        });
    }

Mais bien sûr, cela me dit que la colonne est déjà là. Comment puis-je simplement mettre à jour la valeur par défaut de la colonne x sans supprimer la colonne?

35

Vous pouvez utiliser la méthode change() :

Schema::table('users', function ($table) {
    $table->integer('active')->default(0)->change();
});

Puis exécutez la commande migrate.

Mettre à jour

Pour Laravel 4 utilisez quelque chose comme ceci:

DB::statement('ALTER TABLE `users` CHANGE COLUMN `active` `active` INTEGER NOT NULL DEFAULT 0;');

Dans la méthode up() au lieu de la clause Schema::table();.

42
Alexey Mezenin

Vous devez appeler le fonction de changement pour mettre à jour la colonne

if (Schema::hasTable('users')) {
    Schema::table('users', function (Blueprint $table) {
        if (Schema::hasColumn('users', 'active')) {
            $table->integer('active')->default(0)->change();
        }
    });
}
1
Jerodev