L
laravel:migrations-and-factories
About laravel:migrations-and-factories
A Laravel guide to migrations and factories for developers managing testable, reversible schema changes. It covers migration practices, factory and seed data design, and database testing.
Key features
- 01Pair models with migrations and factories
- 02Manage schema changes through migrations
- 03Organize factories with state modifiers
- 04Build data graphs through relationships
- 05Test with transactions or RefreshDatabase
Use cases
- 01Create a model with its migration and factory
- 02Generate data for feature tests
- 03Safely roll back database migrations
Install
Copy the command and run it in a terminal.
$
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:migrations-and-factoriesAfter installing, type/laravel:migrations-and-factoriesin Claude Code to confirm it loaded.
Details
From the project READMEMigrations and Factories
Keep schema changes safe, testable, and reversible.
Commands
# Create model with migration + factory
sail artisan make:model Post -mfc # or: php artisan make:model Post -mfc
# Run/rollback
sail artisan migrate # or: php artisan migrate
sail artisan migrate:rollback --step=1 # or: php artisan migrate:rollback --step=1
# Fresh DB (dangerous; dev only)
sail artisan migrate:fresh --seed # or: php artisan migrate:fresh --seed
Rules
- Pair each new model with a migration and a factory
- If a migration was merged to
main, never edit it—add a new one - On feature branches, you may amend migrations created on that branch (if not merged)
- Seed realistic but minimal datasets in seeder classes; keep huge datasets external
- Laravel 13+: guard conditional schema changes with
Schema::hasForeignKey('posts', 'posts_user_id_foreign'); use$table->vector('embedding', dimensions: 1536)for pgvector columns (seelaravel:vector-search)
Factories
- Prefer state modifiers (e.g.,
->state([...])) over boolean flags - Use relationships (e.g.,
belongsTo) in factories to build realistic graphs - Keep factories fast; move expensive setup to seeds where possible
Testing
- Use factories in tests; avoid manual inserts
- For integration tests touching DB, use transactions or
RefreshDatabase
Comments
Markdown supported