LARAVEL: How to rename a table column with migrations preserving data

Is it possible to alter your data structure without losing any data?

Gabriel Guerra
Mar 10 · 2 min read

Yes, you can! And it's pretty straightforward.

Credits and image licensing

As stated in Laravel manual:

To rename a column, you may use the renameColumn method on the Schema builder. Before renaming a column, be sure to add the doctrine/dbal dependency to your composer.json file:

Schema::table('users', function (Blueprint $table) {
    $table->renameColumn('from', 'to');
});

You can do this following a few steps:

1) Check if you have the Doctrine DBAL library installed. If you don’t know how to do this, just check at your composer.json file. There should be a line like “doctrine/dbal”: “v2.4.2” (maybe in a different version), as shown in the code down below:

"require": {
    ...
    "doctrine/dbal": "v2.4.2"
}

If the line it's absent, insert “doctrine/dbal”: “v2.4.2”, go to terminal and point it to your App directory.

Now, type "composer update" and wait for composer to finish all operations.

In the case you don't know, Composer is a dependency manager for PHP, used by Laravel.

2) Create a new migration typing in terminal:

php artisan make:migration alter_your_table --table=your_table

3) Now in your recent created migration you’ll insert:

Schema::table('users', function (Blueprint $table) {
    $table->renameColumn('from', 'to');
});

We’re almost done! Now all you have to do is run your migrations like you always do:

php artisan migrate

That's it!

Happy coding :)