php - Laravel 5.3 到 5.4 关系foreignKey问题

标签 php laravel-5

更新到 5.4 后,我的关系不再正常工作。检查后我发现 Laravel 现在正在寻找不同的 外键名称:user_user_idpost_post_id 而不是 user_idpost_id 等。这一直有效到 L 5.3。我还必须将一些数据透视表的主键更新为 tag_tag_id 等,以便让它们再次工作。

我根据这个新约定更新了我的表外键名称,现在它正在工作。但我仍然想知道这种变化的原因和方式以及它从何而来。

谢谢!

最佳答案

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

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

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

来自文档:

Just like previous Laravel releases, this relationship will typically use user_id as the foreign key. However, the behavior could be different from previous releases if you are overriding the getKeyName method of the User model

Upgrading To 5.4.0 From 5.3

更新

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

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

或者您可以定义外键,显式地将第二个参数传递给belongsTo(): 返回 $this->belongsTo(User::class, 'user_id);

关于php - Laravel 5.3 到 5.4 关系foreignKey问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44994022/

相关文章:

php - 制作PHP照片库的有效方法

php - 使用php搜索mysql中字符串数组的所有元素

php - 在 Laravel 5 中设置 Bootstrap 导航栏事件类

laravel-5 - 如何检查用户是否仍然登录谷歌?

Laravel 5.4 更改默认用户名和密码字段

php - 使用 .htaccess 从 url 中删除关键字

php - 我的下拉列表仅显示数据库中数据的第一个字母表

php - laravel 中 https 的问题

php - LARAVEL - 未找到基表或 View : 1146 Table doesn't exist (SQL: select * from )

php - Laravel - 使用不同的 id 进行唯一验证