更新到5.4后,我的关系不再正常工作了。经过检查,我发现Laravel正在寻找不同的东西
foreignKey名称:user_user_id
或post_post_id
代替user_id
,post_id
等。这一直到L 5.3为止。我还必须将我的一些数据表tabel primarykey更新为tag_tag_id等,以便让它们重新运行。
我根据这个新约定更新了我的表外键名称,现在它正在运行。但我仍然想知道为什么以及如何改变它以及它来自何处。
谢谢!
答案 0 :(得分:2)
您是否使用getKeyName
覆盖模型上的主键?
Laravel仍然使用相同的约定user_id
作为外键。
但是,在5.4中,您不需要在定义关系时显式指定外键。
来自文档:
就像之前的Laravel版本一样,这种关系通常会使用user_id作为外键。但是,如果要覆盖User模型的getKeyName方法,则行为可能与以前的版本不同
<强>更新强>
通过设置$ primaryKey的值也可能导致问题。
您没有提交任何代码。但是,假设您的用户模型,您定义$primaryKey = user_id
Laravel会将列名称附加到此键名称。因此,您会看到laravel尝试查询user_user_id。
只需从用户模型中删除$ keyname,laravel将采用遵循约定user_id的外键。
或者你可以定义显式传递第二个参数到belongsTo()的外键:
return $this->belongsTo(User::class, 'user_id);