通过多个 hasMany 关系检索所有记录

Retrieving all records through multiple hasMany relationships

抱歉标题模糊,我不确定是否有这个名称。

我的 Laravel 4 应用程序中的模型之间基本上具有以下关系:

User -----< Template -----< Job

(用户有很多模板,模板有很多工作)。

我想检索用户的所有工作(通过他们的 ID)。通常我会这样做:

Job::where('user_id', '=', Auth::user()->id);

但是作业和用户之间的 link 通过 templates table 存在,所以我尝试这样做:

$jobs = Auth::user()->templates->jobs;

但这给了我关于 $jobs 属性 不存在的错误:

Undefined property: Illuminate\Database\Eloquent\Collection::$jobs

在这种情况下如何检索用户的所有作业?我不想在 UserJob 之间建立关系,因为看起来我只是在复制已经存在的关系?

谢谢。

Laravel 具有 hasManyThrough 关系。如果User hasMany Template,Template hasMany Job,可以通过Template关系设置一个User hasMany Job。

用户模型:

public function jobs() {
    return $this->hasManyThrough('Job', 'Template');
}

有了这种关系,您可以通过以下方式访问用户的职位:

$jobs = Auth::user()->jobs;

有了这个,它就不会复制已经存在的关系;它只是设置语法以按照您需要的方式使用现有关系。您无需更改任何字段或修改任何数据。