Laravel 5不正确推断外键

时间:2015-07-03 15:14:29

标签: php laravel laravel-5.1

根据Laravel 5文档,

  

Eloquent会自动确定正确的外键列   评论模型。按照惯例,Eloquent将采取“蛇案”   拥有模型的名称,并以_id为后缀。所以,对于这个例子,   Eloquent将假设Comment模型上的外键是post_id。

然而,事实并非如此,因为如果有人:

// Class: Video
public function author()
{
    return $this->belongsTo('App\User');
}

然后调用$ video-> author将无效,因为Laravel将假定外键为author_id而不是user_id。

我错过了什么或这确实是文档错误吗?

1 个答案:

答案 0 :(得分:1)

您要发布hasMany的文档,而不是belongsTo

对于belongsTo,它会在视频中查找user_id,并在用户模型上与id进行匹配。对于hasMany,它会在视频中查找id并将其与用户中的video_id进行匹配,这在这种情况下毫无意义。

belongsTohasMany的反转版本。

编辑:是的。对不起,你似乎是对的。当我将关系函数的名称更改为user而不是author时,它可以正常工作。

轻松绕过它的唯一方法是将user_id作为外键传递。

// Video
public function author()
{
    return $this->belongsTo('App\User', 'user_id');
}

但是,belongsTo 的文档状态(您发布了hasMany):

  

Eloquent通过检查关系方法的名称并使用_id 为方法名称添加后缀来确定默认外键名称。但是,如果Phone模型上的外键不是user_id,则可以将自定义键名作为第二个参数传递给belongsTo方法

正如我在原始答案中所说,您正在查看文档中不正确的部分。