Laravel 5.3到5.4关系foreignKey问题

时间:2017-07-09 07:20:56

标签: php laravel-5

更新到5.4后,我的关系不再正常工作了。经过检查,我发现Laravel正在寻找不同的东西 foreignKey名称:user_user_idpost_post_id代替user_idpost_id等。这一直到L 5.3为止。我还必须将我的一些数据表tabel primarykey更新为tag_tag_id等,以便让它们重新运行。

我根据这个新约定更新了我的表外键名称,现在它正在运行。但我仍然想知道为什么以及如何改变它以及它来自何处。

谢谢!

1 个答案:

答案 0 :(得分:2)

您是否使用getKeyName覆盖模型上的主键?

Laravel仍然使用相同的约定user_id作为外键。

但是,在5.4中,您不需要在定义关系时显式指定外键。

来自文档:

  

就像之前的Laravel版本一样,这种关系通常会使用user_id作为外键。但是,如果要覆盖User模型的getKeyName方法,则行为可能与以前的版本不同

Upgrading To 5.4.0 From 5.3

<强>更新

通过设置$ primaryKey的值也可能导致问题。 您没有提交任何代码。但是,假设您的用户模型,您定义$primaryKey = user_id Laravel会将列名称附加到此键名称。因此,您会看到laravel尝试查询user_user_id。

只需从用户模型中删除$ keyname,laravel将采用遵循约定user_id的外键。

或者你可以定义显式传递第二个参数到belongsTo()的外键: return $this->belongsTo(User::class, 'user_id);