Миграция 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

это изменит схему вашей таблицы

ваши данные будут потеряны

Другие вопросы по тегам