更新到 5.4 后,我的关系不再正常工作。检查后我发现 Laravel 现在正在寻找不同的
外键名称:user_user_id
或 post_post_id
而不是 user_id
、post_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
更新
该问题也可能是由设置 $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/