2014-08-11 4 views
25

Я пытаюсь добавить опцию перечисления в таблицу (без потери текущего набора данных) с помощью построителя схемы.Laravel Migration - Update Enum Options

Единственное, что я действительно смог найти об изменении столбца, - 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» не имеет метода «запрос».

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'); 
}); 

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

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

+0

я думаю, что все не хватает только -> изменение(); – antirealm

+0

это был laravel 4.2, так что теперь все по-другому. – Lisa

ответ

48

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

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

Это сделало это, спасибо! – Lisa

+0

Могу ли я установить значение по умолчанию в этом выражении? – Minhajul

+1

@Minhajul - 'ENUM ('admin', 'user', 'кандидат') DEFAULT 'user'' –

-8

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

PHP ремесленник делают: миграция add_something_to_table --Настольные = пользователи

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

Ваш ответ не имеет ничего общего с значениями ENUM. –

Смежные вопросы