Laravel 迁移更改了列的默认值

Laravel migrations change default value of column

我有一个已分配默认值的 table。例如,我们可以查看以下内容:

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 的默认值?

可以使用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(); 子句。

您必须调用 change function 来更新列

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

创建新的迁移文件。并使用 change()

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

还要确保将 doctrine/dbal 依赖项添加到 composer.json 文件