Yeah this is a known limitation when migrating from boolean to enum in PostgreSQL with Laravel.
The issue occurs when PostgreSQL doesn't allow you to directly change a column type from boolean to varchar with constraints in a single statement.
So a workaround here is to drop the column first, then re-added it as a new column (enum).
// Drop the column and recreate it
$table->dropColumn('status');
$table->enum('status', ['requested', 'accepted', 'declined'])->default('requested');
IF YOU NEED TO PRESERVE DATA:
// Step 1: Add the new column
$table->enum('status_temp', ['requested', 'accepted', 'declined'])->nullable();
// Step 2: Copy data (in a separate Laravel migration)
DB::statement("UPDATE statuses SET status_temp = CASE WHEN status = true THEN 'accepted' WHEN status = false THEN 'declined' ELSE 'requested' END");
// Step 3: Drop the old column and rename the temp column
$table->dropColumn('status');
$table->renameColumn('status_temp', 'status');
$table->string('status')->default('requested')->change();