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

时间:2015-02-15 22:16:01

标签: php laravel laravel-4 relationship

对于模糊标题的道歉,我不确定是否有这个名称。

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

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

(用户拥有多个模板,模板包含多个作业)。

我想为用户检索所有作业(按其ID)。通常我会这样做:

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

但是作业和用户之间的链接存在于templates表中,所以我尝试这样做:

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

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

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

如何在此方案中检索用户的所有作业?我不想在UserJob之间建立关系,因为我似乎只是重复已经存在的关系?

感谢。

1 个答案:

答案 0 :(得分:1)

Laravel有一个hasManyThrough关系。如果用户有多个模板,而模板有多个作业,则可以通过模板关系设置用户hasMany作业。

用户模型:

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

通过这种关系,您可以通过以下方式访问用户的工作:

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

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