How to change enum type column in laravel migration?

You can add custom constructor to migration and explain to Doctrine that enum should be treated like string.

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

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

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

Use the DB::statement method:

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

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.