Database Migrations from Custom Directory on Laravel 5.3+

While working on one of my projects, I wanted the database migration file to be placed in a separate folder rather having them all under the same database/migrations folder. A quick browse through laravel documentation showed that you could achieve that from laravel 5.3+. Let’s see how to handle this.
 

Folder Structure

 
I have created a new folder separately and placed my files there thus making my application depended only on laravel core files. So, whenever there is any update, with no or with minor changes my application can be updated to newer version easily.
 

 

Namespacing Folder

 
I have namespaced my folder so that I can register my service providers and other files.
 

 

Registering Service Provider

 
I have created DatabaseServiceProvider under the code/Auth/Providers/DatabaseServiceProvider. In order to register, lets add the code to config/app.php file.
 

 

Migration Creation

 
Now, that everything is ready, lets create our migration file. I have migrations folder under code/Auth/.
 
php artisan make:migration create_sample_table --path=code/Auth/migrations
 
Above code will create a new migration file and place it under code/Auth/migrations folder.
 

Running Migration

 
Now in order to run a migration, you can do it in two ways. First, run migration by specifying path
 
php artisan migrate --path=code/Auth/migrations
 
Or run by adding $this->loadMigrationsFrom() to your service provider like the following
 

 

loadMigrationsFrom takes one parameter $paths. You can add one location or multiple location by passing it as array. Laravel will resolve them and add them to migration paths. Now you can migrate by simple migrate command
 

php artisan migrate
 

That’s all you need to load migrations from custom directory in laravel 5.3 and above.

Happy Coding!


I'm a full stack freelance PHP developer. I have worked on various PHP frameworks like Laravel, Code Igniter, Magento, Wordpress.