Трехсторонние отношения в Ларавеле - PullRequest
0 голосов
/ 06 сентября 2018

Я исчерпал поиск и чтение потенциальных решений, но я не могу понять, как это сделать, поэтому я надеюсь, что кто-то здесь может мне помочь!

У меня есть три модели: клиенты, услуги и пользователи.

  • У клиента много услуг
  • и Услуги принадлежат многим Клиентам.
  • Пользователи могут иметь много Услуг через Клиента.

Пример из реального мира:

  • Клиент (Компания XYZ) имеет эти доступные Услуги (платежи, выставление счетов, отслеживание времени).
  • Пользователь (Боб) назначен Клиенту (Компания XYZ)
  • и для этого конкретного Клиента он имеет доступ к Сервисам платежей и выставления счетов.

На рисунке ниже показан дизайн БД (он не обязательно должен быть реализован именно так).

Каков наилучший подход для реализации этого? Настраиваемая сводная таблица?

enter image description here

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Если я правильно понимаю, сервисы независимо назначаются пользователю, пользователь не будет автоматически иметь все сервисы, доступные клиенту (hasManyThrough).

Таким образом, таблица user_services может содержать службы, назначенные этому пользователю, с дополнительным полем для client_id, указывающим, кому они назначают службу.

Отношения в Eloquent просто принадлежат компании между пользователями и службами, и вам нужно будет запросить идентификатор клиента по этим отношениям. Просто:

public function getServices($client) {
    return $this->services()->where('client_id', $client->id)->get();
}
0 голосов
/ 06 сентября 2018

Ваши отношения действительно должны быть такими сложными? Был ли когда-нибудь случай, когда Пользователю был бы назначен Клиент, но не было бы каких-либо Услуг?

Если нет, то это просто простое отношение «многие ко многим» между таблицами ClientServices и Users, и вы можете удалить таблицу UserClient.

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