对于模糊标题的道歉,我不确定是否有这个名称。
我在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
如何在此方案中检索用户的所有作业?我不想在User
和Job
之间建立关系,因为我似乎只是重复已经存在的关系?
感谢。
答案 0 :(得分:1)
Laravel有一个hasManyThrough关系。如果用户有多个模板,而模板有多个作业,则可以通过模板关系设置用户hasMany作业。
用户模型:
public function jobs() {
return $this->hasManyThrough('Job', 'Template');
}
通过这种关系,您可以通过以下方式访问用户的工作:
$jobs = Auth::user()->jobs;
有了这个,就不会复制已经存在的关系;它只是设置语法以按您需要的方式使用现有关系。您无需更改任何字段或修改任何数据。