Looking to hire Laravel developers? Try LaraJobs

laravel-data-migrations maintained by kobaltdigital

Description
Keep data migrations apart from schema migrations in Laravel
Last update
2026/09/30 10:21 (dev-main)
License
Downloads
40

Comments
comments powered by Disqus

Laravel Data Migrations

Keep data migrations (filling, fixing or purging rows) apart from schema migrations (creating and altering tables).

Data migrations live in their own folder, database/data-migrations by default, and run with the regular php artisan migrate. They share the migrations table with schema migrations and run in timestamp order, so a data migration always runs after the schema migrations it depends on. migrate:status, migrate:rollback and friends work as usual.

Installation

composer require kobaltdigital/laravel-data-migrations

The service provider is auto-discovered.

Usage

Create a data migration:

php artisan make:data-migration fill_zipcode_formats

This creates database/data-migrations/2026_09_30_141516_fill_zipcode_formats.php. Fill in up() and down() like any other migration and run php artisan migrate.

To keep data migrations out of php artisan migrate, set DATA_MIGRATIONS_RUN_WITH_MIGRATE=false and run them on demand:

php artisan migrate --path=database/data-migrations

Configuration

Publish the config file to change the defaults:

php artisan vendor:publish --tag=data-migrations-config
Key Default Description
folder data-migrations Folder inside database/ that holds the data migrations. Also settable with DATA_MIGRATIONS_FOLDER.
path null Absolute path to store data migrations outside database/. Takes precedence over folder.
run_with_migrate true Register the folder with Laravel's migrator so php artisan migrate, migrate:status and migrate:rollback include data migrations. Also settable with DATA_MIGRATIONS_RUN_WITH_MIGRATE. A published config without this key counts as false.
stub null Absolute path to a custom stub for make:data-migration.

Custom stub

Publish the stub to stubs/data-migration.stub and edit it:

php artisan vendor:publish --tag=data-migrations-stubs

The command uses the stub from the stub config key first, then the published stub, then the stub shipped with this package.

Moving an existing project over

If a project already loads a data migrations folder itself:

  1. Require this package.
  2. Remove the project's own loadMigrationsFrom(database_path('data-migrations')) call and make:data-migration command.
  3. Point folder or path at the existing folder if it is not database/data-migrations.

Already executed data migrations stay recorded in the migrations table, so nothing runs twice. Existing migrations with named classes keep working; new ones are generated as anonymous classes, which avoids class name clashes.

Testing

composer test

License

The MIT License (MIT). See LICENSE.md.