How to change enum type column in laravel migration?

I am using Laravel 5.1 and I have a table called packages with this structure:

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

I would like to change the weight_unit enum to:

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

For this I create the following migration:

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

But when I run the migration I receive an error:

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

may not support it.

How can I change this enum?


Solution 1:

Use the DB::statement method:

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

Solution 2:

This worked for me when adding a new enum value to the modified enum column.

Add the following to the up() method:

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

Then in the down() method you can revert the change that was made:

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

Note: before the enum value is removed it needs to be changed to another enum value that will be retained.

Solution 3:

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