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