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

Как изменить столбцы типа перечисления в миграции laravel?

Я использую Laravel 5.1, и у меня есть таблица пакетов с такой структурой:

id              int(11)
weight          decimal(10,2)           
weight_unit     enum('Kg.', 'Gm.')

Я хотел бы изменить перечисление weight_unit на:

weight_unit enum('Grams','Kgs.','Pounds')

Для этого я создаю следующую миграцию:

public function up()
{
    Schema::table('packages', function ($table) {
        $table->enum('weight_unit', array('Grams','Kgs.','Pounds'))->nullable()->change();
    });
}

Но когда я запускаю миграцию, я получаю сообщение об ошибке:

Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform  

may not support it.

Как я могу изменить это перечисление?

4b9b3361

Ответ 1

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

DB::statement("ALTER TABLE packages MODIFY COLUMN weight_unit ENUM('Grams', 'Kgs', 'Pounds')");

Ответ 2

Это сработало для меня при добавлении нового значения перечисления в модифицированный столбцы перечисления.

Добавьте следующий метод up():

DB::statement("ALTER TABLE packages MODIFY weight_unit ENUM('Grams', 'Kgs', 'Pounds', 'new value') NOT NULL");

Затем в методе down() вы можете вернуть сделанное изменение:

DB::statement("ALTER TABLE packages MODIFY weight_unit ENUM('Grams', 'Kgs', 'Pounds') NOT NULL");

Примечание: перед удалением значения перечисления его необходимо изменить на другое значение перечисления, которое будет сохранено.

Ответ 3

Вы можете добавить настраиваемый конструктор для миграции и объяснить Doctrine, что enum следует рассматривать как строку.

public function __construct(\Doctrine\DBAL\Migrations\Version $version)
{
    parent::__construct($version);

    $this->platform->registerDoctrineTypeMapping('enum', 'string');
}

Ответ 4

$table->enum('level', ['easy', 'hard']);