Laravel 8执行migrate时报errno 150外键约束格式错误问题求助
错误原因
Laravel 的迁移执行顺序由迁移文件名前缀的时间戳决定,时间戳越早的迁移越先执行。
你当前的两个迁移时间戳存在顺序错误:
- 带
discussion_id外键的posts表迁移时间戳为2021_11_13 - 被关联的discussions表迁移时间戳为
2021_11_19,晚于posts表的时间戳
执行迁移时会先创建posts表,此时discussions表还未生成,外键指向了不存在的表,因此触发150错误。
解决办法
调整两个迁移的时间戳顺序,保证discussions表的迁移时间早于posts表:
- 修改discussions表的迁移文件名,将前缀的时间戳改为早于
2021_11_13_000535的数值,例如改为2021_11_12_165302_create_discussions_table - 如果你本地已经执行过部分迁移,先执行
php artisan migrate:fresh清空现有表结构再重新执行迁移(注意该操作会清空所有表数据,仅适用于本地开发环境)
额外校验点
如果修改时间戳后仍报错,可以检查以下两点:
- 外键字段和被关联字段的类型是否完全匹配:你当前代码中discussions表的id是
$table->id()(对应bigint unsigned类型),posts表的discussion_id是unsignedBigInteger类型,类型匹配无需修改 - 被关联的表名拼写是否正确:你代码中关联的表名
discussions和迁移创建的表名一致,拼写无误
内容的提问来源于stack exchange,提问作者lucas
相关产品推荐
相关产品推荐

