Удалить значение по умолчанию при миграции?
В процессе миграции я изменяю поле 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;