Laravel получить отношения от многих ко многим отношениям - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть 3 модели: User, Company и Vacancie.

Модели имеют следующие отношения:

Пользователь many to many Компания

Компания one to many Вакансия

Как я могу получить доступ ко всем Vacancie a User?

Я нашел этот ответ, но auth()->user()->with('companies.vacancies')->get(); возвращает всех пользователей моей базы данных.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Создайте отношение 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(). Не проверено, но основная идея верна.

0 голосов
/ 13 ноября 2018

Вы можете сделать что-то вроде этого:

$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()).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...