删除迁移中的默认值?

I'l*_*ack 24 laravel laravel-5.2

在迁移中,我将enabled字段设置为默认设置为1.

public function up()
{
    Schema::table('client', function (Blueprint $table) {
        $table->boolean('enabled')->default(1)->change();
    });
}
Run Code Online (Sandbox Code Playgroud)

down()方法-如何删除default()?我知道可以做default(0)但在创建表期间从未创建默认值.

x-y*_*uri 40

令人惊讶与否,->default(NULL)从表中删除默认值:

public function up()
{
    Schema::table('client', function (Blueprint $table) {
        $table->boolean('enabled')->default(NULL)->change();
    });
}
Run Code Online (Sandbox Code Playgroud)

省略default调用不起作用,因为在当前状态当前状态+指定的更改之间laravel进行差异.没有指定更改,没有差异.

之后,doctrine生成ALTER TABLE语句(特别是生成的列声明),将NULL视为未指定的默认值.

  • @Wirone 只是为了澄清,如果您希望列的默认值是实际的空值,您只需简单地使列可以为空,并且它将始终默认为空。Laravel 中不需要额外的数据库方法;只需将 ->nullable() 添加到您的列定义中。 (3认同)
  • 如果`->default(null)`将`NULL`设置为默认值并且`->noDefault()`将删除默认值会更直观(我考虑过`->default(false)`但它应该设置Postgres 中默认为“false”...)。 (2认同)

Jul*_*uez 7

由于 Laravel 函数无法删除此语句,因此您的 down 函数必须将语句作为原始语句执行。它应该是这样的:

public function down()
  {
    Schema::table('client', function ($table) {
      DB::statement('ALTER TABLE' . $table . 'ALTER COLUMN enabled DROP DEFAULT');
    });
  }
Run Code Online (Sandbox Code Playgroud)

为了执行此迁移,您需要在迁移的顶部包含:

use Illuminate\Support\Facades\DB;
Run Code Online (Sandbox Code Playgroud)