如何在Lumen中创建二次迁移及解决迁移仅生成单表问题
一、如何在Lumen中创建第二次迁移
创建第二次迁移和第一次的操作逻辑完全一致,用Lumen的Artisan命令生成即可:
- 打开终端,进入你的Lumen项目根目录
- 执行命令:
php artisan make:migration create_[你的表名]_table
比如要创建posts表,就运行:php artisan make:migration create_posts_table
这条命令会在database/migrations目录下生成新的迁移文件,文件名自动带上当前日期时间戳(格式为YYYY_MM_DD_HHMMSS_create_[表名]_table.php),Lumen会依据时间戳的先后顺序执行所有迁移。
二、执行php artisan migrate仅生成一个表的问题排查
从你给出的终端输出来看,系统只执行了2020_03_29_184109_create_users_table这个迁移,其他迁移文件未被执行,你可以按以下步骤排查:
检查迁移文件的命名规范
Lumen对迁移文件名有严格要求,必须以YYYY_MM_DD_HHMMSS_开头,后续跟描述性名称(比如create_posts_table)。如果其他迁移文件的前缀日期时间格式错误(比如用了斜杠、数字缺失,或者时间戳比已执行的users迁移更早但实际是后创建的),Lumen会直接忽略它们。确认迁移文件的存放位置
所有迁移文件必须放在database/migrations目录下,Lumen默认仅扫描这个目录中的迁移文件。如果其他迁移文件放在了子目录或其他位置,执行migrate时需要通过--path参数指定路径,比如:php artisan migrate --path=database/migrations/custom检查迁移文件的类名是否正确
迁移文件中的类名必须和文件名对应,比如文件名是2020_03_29_184200_create_posts_table.php,类名就应该是CreatePostsTable(驼峰命名,去掉日期前缀和下划线)。如果类名不匹配,Lumen会找不到对应的迁移类,导致该迁移被跳过(可能会在终端输出错误,你可以仔细查看报错信息)。查看
migrations表的记录
执行migrate时创建的migrations表会记录所有已执行的迁移。你可以连接数据库查看这个表,确认其他迁移是否已经被标记为执行过(如果之前执行过但你没注意到,就不会再次执行)。如果确实未执行,那大概率是前面几点的问题。
如果以上步骤都排查过仍有问题,你可以尝试执行php artisan migrate:status命令,它会列出所有迁移文件的状态(已执行/未执行),能更直观地看到哪些迁移没被执行,方便进一步定位问题。
内容的提问来源于stack exchange,提问作者user6633723

