Laravel 7.4执行迁移时提示Cannot add foreign key constraint问题咨询
问题原因
- 核心触发点是Laravel外键约束的自动表名推断逻辑和实际表名不匹配:
你创建的主表名为复数形式managements,外键字段为management_id,Laravel的constrained()方法默认会去掉外键字段的_id后缀,将关联表名推断为单数的management,执行外键创建时数据库找不到management表,就会抛出1215外键创建失败错误,InnoDB日志中提示的Cannot resolve table name完全对应这个根因。
之前的banners迁移可以正常执行,是因为banner_id去掉后缀后推断的表名banners和你实际创建的主表名完全一致,没有出现单复数不匹配的问题。 - 额外需修正的语法问题:你代码中
category字段的comment方法传参错误,该方法仅支持传入单个字符串参数,你传入了两个字符串参数,也会导致迁移执行报错,需要同步修改。
解决方案
- 手动指定
constrained()方法的关联表名,修改management_translations表的外键定义代码:
将原有代码
$table->foreignId('management_id') ->constrained() ->onDelete('cascade');
替换为
$table->foreignId('management_id') ->constrained('managements') // 手动指定关联的主表名,覆盖默认推断逻辑 ->onDelete('cascade');
- 修正
category字段的注释写法:
将原有代码
$table->string('category') ->comment('board of commissioners', 'board of executives');
替换为
$table->string('category') ->comment('所属分类,可选值:board of commissioners、board of executives');
- 保存修改后重新执行迁移即可。
内容的提问来源于stack exchange,提问作者Lil Student
相关产品推荐
相关产品推荐

