web-dev-qa-db-ja.com

Laravel移行は列のデフォルト値を変更する

デフォルト値がすでに割り当てられているテーブルがあります。例として、次を見ることができます。

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

ここで、アクティブフィールドのデフォルト値を変更します。私はこのようなことをすることを期待しています:

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

しかし、もちろん、それはコラムがすでにそこにあることを教えてくれます。列をドロップせずに列xのデフォルト値を単純に更新するにはどうすればよいですか?

35

change() メソッドを使用できます:

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

次に、migrateコマンドを実行します。

更新

Laravel 4の場合、次のようなものを使用します。

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

up()句ではなくSchema::table();メソッド内。

42
Alexey Mezenin

change function を呼び出して列を更新する必要があります

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