laravel 8 — schema:dump/migration squashing

Over time any software project will get larger, and with laravel projects this often means that the migrations folder can get very large. In laravel 8 the schema:dump command was introduced to clean this up a bit, and instead of running possibly hundreds of migration files when migrating using migrate:fresh, the schema:dump command can run just 1 schema file containing the schema of all the migrations up until that point.

Image for post
Image for post

You will need the mysqldump command available as an environment variable as a prerequisite.

Here is how to do that. First run the schema:dump command:

php artisan schema:dump

You should now see in /database/schema there is a new file called mysql-schema.sql. This contains the schema for all the migrations up until this point.

You will also see that your migration files still exist. You could run the command again to delete all these unnecessary migration files now:

php artisan schema:dump --prune

Now you have a new starting point for your migrations, any new migrations will first run the mysql-schema.sql file, and then run all the migrations that came after.

I hope this was useful to someone.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store