删除迁移中的默认值?

时间:2016-07-13 12:16:37

标签: laravel laravel-5.2

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

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

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

2 个答案:

答案 0 :(得分:32)

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

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

省略default电话无效,因为laraveldiffcurrent state之间产生了current state + specified changes。没有指定更改,没有差异。

之后,doctrine生成ALTER TABLE statement(特别是生成的列声明),将NULL value视为默认值not being specified

答案 1 :(得分:3)

由于无法使用Laravel函数删除此语句,因此down函数必须以raw格式执行该语句。它应该是这样的:

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

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

use Illuminate\Support\Facades\DB;