Reputation: 850
I have a User table in my DB:
$table->increments('id');
$table->string('fullName');
$table->string('email')->unique();
$table->string('password', 50);
$table->enum('role',['boss','employee','customer'])->default('customer');
$table->rememberToken();
$table->timestamps();
I need to change 'role' column type to 'text' and after that, run the new migration in Laravel. If I want to have no effect on previous data, what is the best way to do this.
Upvotes: 3
Views: 7384
Reputation: 2243
It is as simple as following, create a new migration with this one line. Note the ->change()
function, that makes it a ALTER query.
Schema::table('usertable', function (Blueprint $table) {
$table->string('role')->default('author')->change();
});
Remember the size for string() by default is 255, and if your enum value is greater than that, it will truncate the enum value to 255 characters.
Update:
You need to install doctrine/dbal
for this to work see Laravel Migration - Modify Columns
To install doctrine/dbal just do composer require doctrine/dbal
Note: Modifying any column in a table that also has a column of type enum is not currently supported.
Upvotes: 6
Reputation: 5284
You could try to:
Now simply change your database schema as is:
$table->increments('id');
$table->string('fullName');
$table->string('email')->unique();
$table->string('password', 50);
$table->string('role');
$table->rememberToken();
$table->timestamps();
Basically you duplicate the role values to a (temporarily) column and rename it. At least it is safe and won't take a lot of time.
Upvotes: 6