Laravel Отношения: 3 Модели - PullRequest
0 голосов
/ 28 июня 2018

У меня проблема с отношениями в Ларавелле.

У меня есть 3 модели:

Город - (hasMany) -> Клиника - (hasMany) -> Склад

Склад - (принадлежит) -> Клиника - (принадлежит) -> Город

Мне нужно получить все города, в которых есть акции, выглядит как «Сток-> города». Я могу написать sql-запрос:

SELECT ct.id, ct.name
FROM CfgCity as ct
RIGHT JOIN lr_clinics AS cl ON(ct.id=cl.city_id)
RIGHT JOIN lr_clinic_stocks AS st ON(cl.id=st.clinic_id)
WHERE st.deleted_at IS NULL
GROUP BY ct.id

Но я хочу принять решение в laravel-orm, потому что оно более читабельно и мне не нужно писать имена строк и таблиц. Является ли это возможным? Спасибо.

1 Ответ

0 голосов
/ 28 июня 2018

Из вашего вопроса ясно, что city имеет отношение к clinic, а clinic имеет отношение к stock, что означает, что city имеет отношение к stock через clinic. Что вы можете определить это, используя отношения laravel.

Модель города

class City extends Model {

    public function clinics(){
       return $this->hasMany(Clinic::class);
    }

    public function stocks(){
       return $this->hasManyThrough(Stock::class, Clinic::class);
    }
}

Получить данные

$cities = City::whereHas('stocks')->get();

Подробности вы можете проверить https://laravel.com/docs/5.6/eloquent-relationships#has-many-through

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