Php 拉威尔从多对多关系中获得关系

Php 拉威尔从多对多关系中获得关系,php,laravel,relationship,Php,Laravel,Relationship,我有三种型号:User、Company和Vacancie 这些模型具有以下关系: 用户多对多公司 公司一对多Vacancie 我如何才能获得所有VacancieaUser访问权限 我已经找到了答案,但是auth()->user()->with('companys.expansions')->get()返回我的数据库的所有用户。您可以执行以下操作: $userId = $request->user_id; $vacancies = Vacancie::whereHas('companies'

我有三种型号:
User
Company
Vacancie

这些模型具有以下关系:

用户
多对多
公司

公司
一对多
Vacancie

我如何才能获得所有
Vacancie
a
User
访问权限


我已经找到了答案,但是
auth()->user()->with('companys.expansions')->get()返回我的数据库的所有用户。

您可以执行以下操作:

$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();
在这段代码中,我认为您在
vacance
中有
companys()
关系,在
Company
中有
users()
关系


这将与您现在所做的相反。当您在用户模型中调用
get()
时,您将获得已加载关系的所有用户(
with()
)。

用户
模型上创建一个
空缺
关系,如下所示:

//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();
    }

然后,您可以使用('空缺')->get()执行
auth()->user()->。未经测试,但总体思路是正确的。

-试试这一个,auth()->user()->has('companys.dispositions')->with('companys.dispositions')->get();-您可以使用以下命令对关系执行更复杂的逻辑:whereHas('relation',function($query){…})…如何获取用户?此代码在api中,我使用
$request->user()
获取用户。我无法访问函数中的
$request
变量我使用
$request->user\u id
编辑了答案。要在内部函数中使用变量,必须调用
use($variable)
。谢谢!那
使用($variable)
我不知道!我很高兴这有帮助!:)