mcpField
L
laravel-migrations

laravel-migrations

github.com/fusengine数据与数据库3462 次安装2 周前更新
代码仓库

关于 laravel-migrations

laravel-migrations 是面向 Laravel 13 开发者的数据库迁移技能,涵盖从表结构变更到生产发布的流程。除 Schema Builder、索引、外键和数据填充外,也介绍 pgvector 扩展及向量列。

主要功能

  1. 01使用 Schema Builder 创建和修改表
  2. 02涵盖列类型、索引与外键约束
  3. 03提供 Artisan 命令与数据填充指南
  4. 04测试迁移并安全部署到生产环境
  5. 05通过迁移启用 pgvector

适用场景

  1. 01创建表、添加列或调整索引
  2. 02为关系数据配置外键级联行为
  3. 03验证回滚并规划生产环境迁移
  4. 04在 PostgreSQL 迁移中启用 pgvector

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/fusengine/agents --skill laravel-migrations

安装后在 Claude Code 中输入/laravel-migrations确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
columns.md
commands.md
foreign-keys.md
indexes.md
production.md
schema.md
seeding.md
testing.md
troubleshooting.md
references/templates/
CreateTableMigration.php.md
MigrationTest.php.md
ModifyTableMigration.php.md
PivotTableMigration.php.md
Seeder.php.md

详细介绍

涵盖 Laravel 13 数据库迁移:用于创建、修改和删除表的 Schema Builder API、50 多种列类型和修饰符、索引类型(primary、unique、fulltext、spatial)、带级联选项的外键约束、Artisan 迁移命令、Seeder、迁移测试、安全的生产环境发布、故障排查,以及通过 Schema::ensureVectorExtensionExists() 启用 pgvector 以支持向量列(查询向量列请参阅 laravel-vector-search)。

Laravel 迁移

Agent 工作流(强制)

任何实现开始前,先并行启动 3 个 Agent,每个使用一个 Agent 调用,并指定 name:

  1. fuse-ai-pilot:explore-codebase - 检查现有迁移
  2. fuse-ai-pilot:research-expert - 通过 Context7 验证 Laravel 13 模式
  3. mcp__context7__query-docs - 检查特定的 Schema Builder 功能

实现完成后,运行 fuse-ai-pilot:sniper 进行验证。


概览

功能说明
Schema Builder创建、修改、删除表
列50 多种列类型及修饰符
索引Primary、unique、fulltext、spatial
外键带级联选项的约束
Seeder填充表数据

关键规则

  1. 始终定义 down() - 确保迁移可回滚
  2. 使用 foreignId()->constrained() - 不要使用原始 unsignedBigInteger
  3. 为外键添加索引 - 对性能至关重要
  4. 部署前测试回滚 - 验证 down() 是否正常工作
  5. 绝不修改已部署的迁移 - 创建新的迁移

决策指南

迁移类型
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
列类型选择
使用场景类型示例
主键id()自增 BIGINT
外键foreignId()->constrained()引用父级
UUID 主键uuid()->primary()UUID
布尔值boolean()is_active
枚举enum('status', [...])order_status
JSONjson()preferences
金额decimal('price', 10, 2)99999999.99
时间戳timestamps()created_at、updated_at
软删除softDeletes()deleted_at
外键级联
场景onDelete使用场景
严格完整性restrictOnDelete()财务记录
自动清理cascadeOnDelete()帖子 → 评论
保留并设为 nullnullOnDelete()可选关系
不采取操作noActionOnDelete()审计日志

参考指南

核心概念
主题参考资料何时查阅
Schemaschema.md表操作
列columns.md列类型
索引indexes.md性能索引
外键foreign-keys.md约束
命令commands.mdArtisan 命令
数据填充seeding.md填充数据
高级主题
主题参考资料何时查阅
测试testing.md测试迁移
生产环境production.md安全部署
故障排查troubleshooting.md修复错误
模板
模板使用场景
CreateTableMigration.php.md新建表
ModifyTableMigration.php.md修改表
PivotTableMigration.php.md多对多关系
Seeder.php.md数据填充模式
MigrationTest.php.md测试迁移

快速参考

创建表
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']);
});
修改表
Schema::table('posts', function (Blueprint $table) {
    $table->string('slug')->after('title')->unique();
    $table->boolean('featured')->default(false);
});
命令
php artisan make:migration create_posts_table
php artisan migrate
php artisan migrate:rollback --step=1
php artisan migrate:fresh --seed

最佳实践

应该做
  • 对外键使用 foreignId()->constrained()
  • 为常见查询添加复合索引
  • 部署前测试 down() 方法
  • 使用 --pretend 预览 SQL
不应该做
  • 修改已部署的迁移
  • 忘记 down() 方法
  • 不使用 Schema Builder 而直接编写原始 SQL
  • 忽略外键上的索引

Laravel 13 说明

Schema::ensureVectorExtensionExists()(pgvector)

Laravel 13 提供了一个辅助方法,可在迁移中为 PostgreSQL 启用 pgvector 扩展。适用于嵌入向量和语义搜索。

use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up(): void
    {
        Schema::ensureVectorExtensionExists();

        Schema::create('documents', function (Blueprint $table) {
            $table->id();
            $table->text('content');
            $table->vector('embedding', dimensions: 1536)->index(); // OpenAI text-embedding-3-small; HNSW cosine vector index
            $table->timestamps();
            // equivalent: $table->vectorIndex('embedding'); — removal: dropVectorIndex() (13.30+)
        });
    }
};

MariaDB 11.7+ 也支持 vector 列/索引(无需扩展)。有关 whereVectorSimilarTo() 查询,请参阅 [[laravel-vector-search]]。

Schema Builder 13.x 新特性
  • $table->foreignUuidFor(User::class)(13.9+)和 foreignUlidFor()(13.25+)
  • 无锁索引:$table->string('email')->unique()->online();(PostgreSQL / SQL Server)
  • 在索引或外键上使用 ->inplace()(13.33+,MySQL),采用 INPLACE DDL 算法

评论

支持 Markdown