Laravel从多对多关系中获得关系

时间:2018-11-13 17:43:08

标签: php laravel relationship

我有3个模型:UserCompanyVacancie

模型具有以下关系:

用户many to many公司

公司one to many的空缺

我如何获得Vacancie的所有User的访问权限?

我找到了this个答案,但auth()->user()->with('companies.vacancies')->get();返回了我数据库的所有用户。

2 个答案:

答案 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()。尚未测试,但总体思路成立。