Laravel 9添加foreign key约束返回150错误求助
解决Laravel迁移外键150错误的方案
你的问题大概率出在迁移执行顺序上:
users表的外键role_id依赖roles表的主键,但如果Laravel先执行了users表的迁移,此时roles表还未创建,外键约束根本无法建立,就会抛出150错误。
Laravel是按照迁移文件名开头的时间戳决定执行顺序的,比如:
- 若
create_roles_table文件名是2024_05_20_100000_create_roles_table.php - 而
create_users_table是2024_05_20_095959_create_users_table.php
users表会先被创建,直接触发外键错误。
修复步骤:
- 检查迁移文件时间戳:确认roles表的迁移文件时间戳比users表的更早。
- 调整顺序:
- 若已执行过迁移,先运行
php artisan migrate:rollback回滚。 - 修改users迁移文件的时间戳,让它晚于roles表的迁移时间戳;或者直接删除两个迁移文件,先执行
php artisan make:migration create_roles_table,再执行php artisan make:migration create_users_table,生成的时间戳会自动是正确顺序。
- 若已执行过迁移,先运行
- 重新执行迁移:运行
php artisan migrate即可。
其他低概率排查点:
- 确认数据库引擎是InnoDB(Laravel默认配置,MyISAM不支持外键约束)。
- 字段类型匹配:你的代码中
foreignId()对应id(),都是unsigned bigint,这部分没问题。
内容的提问来源于stack exchange,提问作者Zain Shabir
相关产品推荐
相关产品推荐

