Удалить значение по умолчанию при миграции?

В процессе миграции я изменяю поле enabled, чтобы установить значение по умолчанию как значение по умолчанию.

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

В down() метод - Как удалить default()? Я знаю, что можно сделать default(0), но default никогда не создавался во время создания таблицы.

Ответ 1

Удивительно или нет, ->default(NULL) удаляет значение по умолчанию из таблицы:

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

Отказ от вызова default не работает, поскольку laravel делает diff между текущее состояние и текущее состояние + указанные изменения. Не указано никаких изменений, нет разницы.

После этого doctrine генерирует оператор ALTER TABLE (в частности, итоговое объявление столбца), обрабатывая NULL value как значение по умолчанию не указывается.

Ответ 2

Так как нет способа удалить этот оператор с помощью функций 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;