You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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表会先被创建,直接触发外键错误。

修复步骤:

  1. 检查迁移文件时间戳:确认roles表的迁移文件时间戳比users表的更早。
  2. 调整顺序:
    • 若已执行过迁移,先运行php artisan migrate:rollback回滚。
    • 修改users迁移文件的时间戳,让它晚于roles表的迁移时间戳;或者直接删除两个迁移文件,先执行php artisan make:migration create_roles_table,再执行php artisan make:migration create_users_table,生成的时间戳会自动是正确顺序。
  3. 重新执行迁移:运行php artisan migrate即可。

其他低概率排查点:

  • 确认数据库引擎是InnoDB(Laravel默认配置,MyISAM不支持外键约束)。
  • 字段类型匹配:你的代码中foreignId()对应id(),都是unsigned bigint,这部分没问题。

内容的提问来源于stack exchange,提问作者Zain Shabir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:45:13