Подтвердить что ты не робот

Laravel Migration - обновить параметры перечисления

Я пытаюсь добавить опцию enum в таблицу (без потери текущего набора данных) с помощью построителя схемы.

Единственное, что я действительно смог найти об изменении столбца, это http://www.flipflops.org/2013/05/25/modify-an-existing-database-column-in-a-laravel-migration/ и Я считаю, что это было написано для Laravel3.

Несмотря на это, я попытался использовать DB :: query ('ALTER TABLE...'); команда, но с ошибкой call_user_func_array() ожидает, что параметр 1 является допустимым обратным вызовом, класс 'Illuminate\Database\MySqlConnection' не имеет метода 'query'.

DB::query("ALTER TABLE users CHANGE COLUMN permissions permissions ENUM('admin', 'user', 'candidate')");

Я также попытался сделать это:

Schema::table('users', function ($table) {
    $table->enum('permissions', array('admin', 'user', 'candidate'))->default('user');
});

но он ошибается, говоря, что столбец уже существует.

Какой лучший способ сделать то, что я пытаюсь сделать, не теряя все данные в этом столбце?

4b9b3361

Ответ 1

Используйте метод DB::statement:

DB::statement("ALTER TABLE users CHANGE COLUMN permissions permissions ENUM('admin', 'user', 'candidate') NOT NULL DEFAULT 'user'");

Ответ 2

Создайте новую миграцию, но используйте старую таблицу в качестве ссылки, поэтому при запуске переноса php artisan она добавит к ней новый столбец.

php artisan make: миграция add_something_to_table --table = users

    Schema::table('table_name_to_add_to', function (Blueprint $table) {
        $table->string('new_column');
    });