我有3个模型:User
,Company
和Vacancie
。
模型具有以下关系:
用户many to many
公司
公司one to many
的空缺
我如何获得Vacancie
的所有User
的访问权限?
我找到了this个答案,但auth()->user()->with('companies.vacancies')->get();
返回了我数据库的所有用户。
答案 0 :(得分:1)
您可以执行以下操作:
$userId = $request->user_id;
$vacancies = Vacancie::whereHas('companies', function ($q) use ($userId){
$q->whereHas('users', function($q1) use ($userId) {
$q1->where('users.id', userId);
});
})->get();
在这段代码中,我正在考虑您在companies()
中具有Vacancie
和在users()
中具有Company
的关系。
这将与您现在所做的相反。在用户模型中调用get()
时,您将获得所有具有预加载关系(with()
)的用户。
答案 1 :(得分:0)
在vacancies
模型上创建一个User
关系,如下所示:
//inside the User model
public function vacancies()
{
$vacancies= new Illuminate\Database\Eloquent\Collection;
foreach($this->companies as $company)
{
$vacancies = $vacancies->merge($company->vacancies->get());
}
return $vacancies->unique();
}
然后您可以执行auth()->user()->with('vacancies')->get()
。尚未测试,但总体思路成立。