feat: 添加统一数据库初始化命令,简化数据库迁移和种子填充流程;新增基础和演示数据填充器

This commit is contained in:
2026-06-09 17:41:37 +08:00
parent 5bd7517ce9
commit bbdb69dabb
7 changed files with 199 additions and 21 deletions

View File

@@ -34,6 +34,45 @@ php artisan schema:dump --database=pgsql
如果只是日常开发中的普通字段变更,仍然按正常方式新增 migration 即可;等累积到一段时间后,再统一刷新一次 schema dump。
## 统一数据库初始化
现在统一使用一条命令初始化或更新数据库:
```bash
php artisan lottery:db-init
```
这条命令会自动完成:
- 执行 `migrate`,让 Laravel 在空库时优先加载 `database/schema/pgsql-schema.sql`
- 执行生产安全的基础种子 `FoundationSeeder`
- 执行后台权限同步与体检 `lottery:admin-auth-sync --audit`
- 在非 `production` 环境默认补充联调用演示数据 `LocalDemoSeeder`
常用场景:
```bash
# 新同事拉代码 / 日常本地初始化
php artisan lottery:db-init
# 本地需要清空重建再灌演示数据
php artisan lottery:db-init --fresh
# 线上发布 / 已有数据环境增量更新
php artisan lottery:db-init
# 线上强制不写任何演示数据
php artisan lottery:db-init --no-demo
```
种子职责约定:
- `FoundationSeeder`:全环境通用、可幂等、允许在线上执行的基础数据
- `LocalDemoSeeder`:仅本地/测试联调使用的账号、玩家、期号、仪表盘样例
- `DatabaseSeeder`:兼容 Laravel 默认入口,内部按环境组合以上两层
以后给别人开发或线上部署时,统一记这一条命令即可,不再要求手工区分“先 migrate 还是先 seed”。
## About Laravel
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
@@ -72,7 +111,7 @@ Boost provides your agent 15+ tools and skills that help agents build Laravel ap
**本仓库根目录**(即含 `artisan``lotterLaravel` 目录)开 **3 个终端**,每段整段复制即可。若已用 Herd / Valet / Sail / 自有 Web 服务器指到 `public`,可不跑「终端 1」。
**前置(首次)**`cp .env.example .env``composer install``php artisan key:generate``php artisan migrate`(及你的库表/种子)。本地重置演示数据可用 `php artisan migrate:fresh --seed`(会清空当前库)。若只改了 `AdminAuthorizationRegistry` 而未新增迁移,还 `php artisan lottery:admin-auth-sync --audit`
**前置(首次)**`cp .env.example .env``composer install``php artisan key:generate``php artisan lottery:db-init`。本地重置演示数据可用 `php artisan lottery:db-init --fresh`(会清空当前库)。若只改了 `AdminAuthorizationRegistry` 而未新增迁移,还可单独执行 `php artisan lottery:admin-auth-sync --audit`
**终端 1 — HTTP API**