迁移、种子与测试数据
核心表结构由核心包维护,业务表由应用维护,自有扩展维护自己的表与 schema 版本。应用升级通过迁移推进结构,不复制核心 migration 文件。
注册应用迁移
Section titled “注册应用迁移”应用使用 Goravel 公开 migration 合同,在 bootstrap.Options.Migrations 注册。核心迁移先注册,应用迁移随后注册;重复的迁移签名会使启动失败。
示例插件将迁移放在业务模块旁,并在 Options() 中装配。迁移提交后保持已有签名和语义稳定,后续结构变化追加新迁移。
# 应用根目录pnpm server:go run . artisan migrate扩展 schema 还受扩展生命周期与 checkpoint 管理,不直接修改 checkpoint 表来跳过迁移。
种子只负责初始化
Section titled “种子只负责初始化”db:seed 先运行核心种子,再运行应用种子。应用菜单参加首次授权事务;重跑不会撤销管理员此后对权限和菜单的调整。
种子按用途分为三类:baseline、demo 与 named。核心仅字典种子 DictSeeder 属于 baseline(sys_common_status、sys_user_sex、sys_notice_type),参数、通知与工作流种子为 setup-only;应用通过 bootstrap.Options 显式注册 BaselineSeeders、DemoSeeders 与 NamedSeeders。baseline 种子保留可修改字段与禁用、删除状态,并记录 reference receipts 供核对。种子执行前做统一签名检查,重复签名会直接报错。
业务种子应幂等,只补充缺失的默认数据,不会覆盖已经调整的值。
# 应用根目录;仅首次安装的开发数据库pnpm server:go run . artisan db:seed日常升级使用 pnpm app:upgrade:它执行必要的前向迁移与回归,但不运行全量种子;升级脚本中不加入演示种子、fresh 或 reset。
测试使用专用数据库,连接不指向日常开发或业务数据库。核心测试与应用测试分别使用自己的测试库。
复用核心 testkit 时,MODU_TEST_DATABASE 必须满足名称限制:modu_*_test,或历史兼容名称 gorave_admin_test。运行前仍要核对实际连接配置。
在应用根目录通过包装脚本验证后端:pnpm server:go build ./...、pnpm server:go vet ./... 与 pnpm server:go test ./...。涉及 HTTP、权限或扩展生命周期的变化,补充相应功能回归;数据初始化成功不能代替业务验证。