laravel-migrations
Create database migrations with schema builder, indexes, foreign keys, and seeders. Use when designing database schema, creating tables, or modifying columns.
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.
| name | laravel-migrations |
|---|---|
| description | Create database migrations with schema builder, indexes, foreign keys, and seeders. Use when designing database schema, creating tables, or modifying columns. |
Laravel Migrations
Documentation
Database
- database.md - Database basics
- migrations.md - Migrations
- seeding.md - Database seeding
- queries.md - Query builder
- mongodb.md - MongoDB integration
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