laravel-migrations

fusengine's avatarfrom fusengine

Create database migrations with schema builder, indexes, foreign keys, and seeders. Use when designing database schema, creating tables, or modifying columns.

0stars🔀0forks📁View on GitHub🕐Updated Jan 10, 2026

When & Why to Use This Skill

This Claude skill streamlines the database management process within Laravel applications by automating the creation of migrations, schema definitions, and seeders. It enables developers to programmatically define table structures, manage indexes, and establish foreign key relationships, ensuring consistent and version-controlled database evolution across different environments.

Use Cases

  • Designing and generating new database tables using Laravel's fluent schema builder with specific column types and constraints.
  • Modifying existing database structures, such as adding new columns, updating indexes, or renaming fields without writing manual SQL.
  • Implementing database seeding and factories to automatically populate development or testing environments with realistic mock data.
  • Managing database versioning and rollbacks across local, staging, and production environments using standardized Artisan commands.
namelaravel-migrations
descriptionCreate database migrations with schema builder, indexes, foreign keys, and seeders. Use when designing database schema, creating tables, or modifying columns.

Laravel Migrations

Documentation

Database

Migration Template

<?php

declare(strict_types=1);

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->foreignId('user_id')->constrained()->cascadeOnDelete();
            $table->string('title');
            $table->string('slug')->unique();
            $table->text('content');
            $table->string('status')->default('draft');
            $table->timestamp('published_at')->nullable();
            $table->timestamps();
            $table->softDeletes();

            $table->index(['status', 'published_at']);
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

Column Types

$table->string('name', 100);           // VARCHAR(100)
$table->text('description');           // TEXT
$table->integer('count');              // INT
$table->decimal('price', 8, 2);        // DECIMAL(8,2)
$table->boolean('is_active');          // BOOLEAN
$table->json('metadata');              // JSON
$table->timestamps();                  // created_at, updated_at
$table->softDeletes();                 // deleted_at

Foreign Keys

$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->foreignId('author_id')->constrained('users')->nullOnDelete();

Seeder

<?php

declare(strict_types=1);

namespace Database\Seeders;

final class PostSeeder extends Seeder
{
    public function run(): void
    {
        User::factory()->count(10)->create()->each(function (User $user) {
            Post::factory()->count(5)->for($user)->create();
        });
    }
}

Commands

php artisan make:migration create_posts_table
php artisan migrate
php artisan migrate:fresh --seed
php artisan migrate:rollback --step=3