Миграция Laravel изменяет значение по умолчанию для столбца
У меня есть таблица со значением по умолчанию, которое уже назначено. В качестве примера мы можем посмотреть следующее:
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, не отбрасывая столбец?
Ответы
Ответ 1
Вы можете использовать метод 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();
.
Ответ 2
Вы должны вызвать функцию изменить для обновления столбца
if (Schema::hasTable('users')) {
Schema::table('users', function (Blueprint $table) {
if (Schema::hasColumn('users', 'active')) {
$table->integer('active')->default(0)->change();
}
});
}
Ответ 3
Вы можете создать другую миграцию -
php artisan migrate:make update_users
чем внутри новой миграции, напишите свой запрос на изменение для изменений -
public function up()
{
DB::query("ALTER TABLE... ");
// the alter query here ^
));
}
а затем снова выполнить миграцию
php artisan migrate
Ответ 4
выполните приведенный ниже код в CLI
php artisan migration:refresh
он изменит вашу схему таблицы
ваши данные будут потеряны