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

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

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