所以每个用户可以拥有多个页面,每个页面可以有多个用户(分配一个角色),每个页面可以有一个作业。现在,我得到了用户拥有的页面,就像这样:
user.php
/**
* Get the pages.
*
* @return App\Modules\Pages\Entities\Pages
*/
public function pages()
{
return $this->belongsToMany('App\Modules\Pages\Entities\Pages')->withTimeStamps();
}
现在,我正在尝试获取用户的作业,这些作业属于用户的所有页面
我在pages模型上有一个关系,页面可以有很多这样的工作:
页。php
/**
* Get the jobs.
*
* @return App\Modules\Jobs\Entities\Jobs
*/
public function jobs()
{
return $this->hasmany('App\Modules\Jobs\Entities\Jobs');
}
关系是这样的:
用户表
id | name | password.. etc
页数表
id | name
页数据透视表
id | pages_id | user_id
工作表
id | pages_id | name
因此,我的问题是:如何获得属于用户拥有的或与之关联的所有或任何页面的所有作业。我尝试了以下方法:
$jobs = User::with('pages.jobs')
->where('id', Auth::user()->id)
->get();
它只获取用户的表,而不是作业。
现在,我知道我可以做到以下几点,但这是资源密集型的,不是我想要的方式:
@foreach(Auth::user()->pages as $page)
@foreach($page->jobs as $job)
// ...
@endforeach
@endforeach
那么,到底有没有办法通过hasmanyThrough或其他解决方案来实现这一点?
请使用where have()
方法:
Job::whereHas('page.users', function($q) {
$q->where('id', auth()->id());
})->get();
我假设这些关系是有定义的。如果没有,请定义它们。在页面中
模型:
public function users()
{
return $this->belongsToMany('App\Modules\Jobs\Entities\Users');
}
在作业
模型中:
public function page()
{
return $this->belongsTo('App\Modules\Jobs\Entities\Pages');
}
如果不遵循命名约定,还需要将透视表名称和外键名称添加到这些关系定义中。