Laravel 迁移更改列的默认值

2022-08-30 09:45:38

我有一个已分配默认值的表。对于一个例子,我们可以看一下以下内容:

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 的默认值而不删除列?


答案 1

您可以使用 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();


答案 2

您必须调用更改函数来更新列

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

推荐