Laravel красноречивый строитель, 3 таблицы с отношениями - PullRequest
0 голосов
/ 10 июля 2019

У меня есть 3 модели: contracts, centers и user_centers.

Отношение между contracts и centers составляет от 1 до N (1 центр имеет N контрактов)

А соотношение между centers и user_centers, равным 1 центру, имеет N user_centers.

Я пытаюсь найти функцию, которая возвращает контракты путем фильтрации по user_id (user_centers таблица)

Для этого я делаю следующее

    $query = Contract::query();
    $user_id = $request->query('userId');

    $query->when(request('user_id'), function ($q) use ($user_id) {
        $q->whereHas('centers.user_centers', function ($q) use ($user_id) {
            $q->where('user_id', $user_id);
        });
    });

Это не работает, и я не знаю, не понял ли я отношения или красноречиво.

Спасибо

1 Ответ

1 голос
/ 10 июля 2019

Просто добавьте функцию на модальном

class Contracts extends Model {
     ...
     public function centres()
     {
         $this->hasMany(Centres::class, 'centre_id', 'id');
     }
}

Когда для 1 центра со многими user_centres используйте эту функцию в модели:

class Centers extends Model {
     ...
     public function user_centers()
     {
         $this->hasMany(user_centers::class, 'user_centers_id', 'id');
     }
}

и eloquent:

Contract::with('centres')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...