Как лучше структурировать связи трех моделей (а-ля прайс)?

Продолжаю переписывать старый проект на laravel. В попытках оптимизировать все усложнил по традиции.

Есть 3 модели. City, Category, Service. Грубо говоря прайс-лист.
City-Category тут все понятно. Many to Many через доп. таблицу. А дальше начинается затык.
Category-Service. сделал One to Many. Вроде логично - каждая услуга принадлежит какой-то категории. При этом категория привязана к городу.
А теперь возникает ситуация, что в разных городах стоимость одной и той же услуги может быть разной.
И не могу никак сообразить, что куда привязывать в таком случае.

Пробовал сделать
public function services()
    {
        return $this->hasManyThrough(
            Service::class,
            Category::class,
        );
    }

Но логично, что он не находит поля city_id в модели Category, поскольку связь идет через many to many.

По идее нужна еще таблица связей - City-Service? many to many с дополнительным полем price.

Раньше я кондово это все делал. Таблица с категориями (категория, город). Таблица с услугами (category_id, city).
И вручную в каждый город создать категории. Потом в каждый город в каждую категорию добавлять одни и те же услуги. 5 лет назад это было 2 города. Сейчас в общем это надо все усложнить.

Буду признателен за советы и где можно подсмотреть подобные реализации.
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы