Laravel迁移报错General error:1215,请求排查外键约束问题
我来帮你分析这个常见的外键错误,结合你的表结构,主要有这几个可能的原因:
表名拼写错误(最可能的原因)
你在author_book表的外键定义里写的是:$table->foreign('author_id')->references('id')->on('author');但你实际创建的作者表是
authors(复数形式),这里应该改成on('authors')才对!数据库里根本没有叫author的表,自然没法创建外键约束。字段类型不匹配
虽然你的代码看起来没问题,但还是要确认:authors表的id用的是increments('id')(对应MySQL的unsigned int类型),而author_book的author_id是unsignedInteger,两者类型一致。如果后续你把id改成bigIncrements,那外键字段也要对应改成unsignedBigInteger,不然会出现类型不匹配的错误。迁移文件执行顺序错误
外键关联的表必须先存在,才能创建关联表。也就是说,authors和books的迁移文件必须在author_book之前执行。检查一下你的迁移文件名,它们的时间戳前缀应该比author_book的更早,Laravel是按时间戳顺序执行迁移的。如果顺序反了,创建author_book时authors表还没创建,就会报这个错。数据库引擎不支持外键
MySQL的MyISAM引擎不支持外键约束,必须使用InnoDB。Laravel默认会用InnoDB,但如果你手动修改过表引擎,比如在某个Schema里加了$table->engine = 'MyISAM';,那就要改回InnoDB。
先把第一个问题修复试试,把on('author')改成on('authors'),应该就能解决这个错误了!
内容的提问来源于stack exchange,提问作者Tanhaeirad

