Claude-skill-registry laravel-migrations
Laravel 12 database migrations - Schema Builder, columns, indexes, foreign keys, seeders. Use when designing database schema or managing migrations.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/laravel-migrations" ~/.claude/skills/majiayu000-claude-skill-registry-laravel-migrations && rm -rf "$T"
manifest:
skills/data/laravel-migrations/SKILL.mdsource content
Laravel Migrations
Agent Workflow (MANDATORY)
Before ANY implementation, launch in parallel:
- fuse-ai-pilot:explore-codebase - Check existing migrations
- fuse-ai-pilot:research-expert - Verify Laravel 12 patterns via Context7
- mcp__context7__query-docs - Check specific Schema Builder features
After implementation, run fuse-ai-pilot:sniper for validation.
Overview
| Feature | Description |
|---|---|
| Schema Builder | Create, modify, drop tables |
| Columns | 50+ column types with modifiers |
| Indexes | Primary, unique, fulltext, spatial |
| Foreign Keys | Constraints with cascade options |
| Seeders | Populate tables with data |
Critical Rules
- Always define down() - Reversible migrations
- Use foreignId()->constrained() - Not raw unsignedBigInteger
- Add indexes on foreign keys - Performance critical
- Test rollback before deploy - Validate down() works
- Never modify deployed migrations - Create new ones
Decision Guide
Migration Type
Need schema change? ├── New table → make:migration create_X_table ├── Add column → make:migration add_X_to_Y_table ├── Modify column → make:migration modify_X_in_Y_table ├── Add index → make:migration add_index_to_Y_table └── Seed data → make:seeder XSeeder
Column Type Selection
| Use Case | Type | Example |
|---|---|---|
| Primary Key | | Auto-increment BIGINT |
| Foreign Key | | References parent |
| UUID Primary | | UUIDs |
| Boolean | | is_active |
| Enum | | order_status |
| JSON | | preferences |
| Money | | 99999999.99 |
| Timestamps | | created_at, updated_at |
| Soft Delete | | deleted_at |
Foreign Key Cascade
| Scenario | onDelete | Use Case |
|---|---|---|
| Strict integrity | | Financial records |
| Auto-cleanup | | Post → Comments |
| Preserve with null | | Optional relations |
| No action | | Audit logs |
Reference Guide
Core Concepts
| Topic | Reference | When to Consult |
|---|---|---|
| Schema | schema.md | Table operations |
| Columns | columns.md | Column types |
| Indexes | indexes.md | Performance indexes |
| Foreign Keys | foreign-keys.md | Constraints |
| Commands | commands.md | Artisan commands |
| Seeding | seeding.md | Populate data |
Advanced Topics
| Topic | Reference | When to Consult |
|---|---|---|
| Testing | testing.md | Test migrations |
| Production | production.md | Deploy safely |
| Troubleshooting | troubleshooting.md | Fix errors |
Templates
| Template | When to Use |
|---|---|
| CreateTableMigration.php.md | New table |
| ModifyTableMigration.php.md | Alter table |
| PivotTableMigration.php.md | Many-to-many |
| Seeder.php.md | Seed patterns |
| MigrationTest.php.md | Test migrations |
Quick Reference
Create Table
Schema::create('posts', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->string('title'); $table->text('content'); $table->enum('status', ['draft', 'published'])->default('draft'); $table->timestamps(); $table->softDeletes(); $table->index(['user_id', 'status']); });
Modify Table
Schema::table('posts', function (Blueprint $table) { $table->string('slug')->after('title')->unique(); $table->boolean('featured')->default(false); });
Commands
php artisan make:migration create_posts_table php artisan migrate php artisan migrate:rollback --step=1 php artisan migrate:fresh --seed
Best Practices
DO
- Use
for foreign keysforeignId()->constrained() - Add composite indexes for common queries
- Test down() method before deploying
- Use
to preview SQL--pretend
DON'T
- Modify already-deployed migrations
- Forget down() method
- Use raw SQL without Schema Builder
- Skip indexes on foreign keys