Каков наилучший способ наладить отношения в командах с лидером и пользователями

#mysql #laravel #eloquent #relationship

#mysql #laravel #красноречивый #отношения

Вопрос:

Я создаю приложение laravel и сталкиваюсь с проблемой.

 table users:
-id
-name

table teams:
-id
-name

table team_agent
-agent_id (users.id)
-team_id

table team_leader
-leader_id (users.id)
-team_id
  

В одной команде может быть только один лидер и несколько агентов.
Один агент может быть частью только одной команды.
Один лидер может быть назначен только одной команде.

В пользовательской модели у меня есть функция team(), которая должна возвращать команду пользователя.

Какова наилучшая практика, если я хочу иметь 2 функции в пользовательской модели. Тот, который возвращает команду пользователя (если это агент) и тот, который возвращает команду (если это лидер).

Правильно ли я делаю это со сводной таблицей для части лидера? Или я должен поместить leader_id в таблицу team? Я действительно не знаю, как справиться с этой частью.


Или я должен добавить leader_id в таблицу teams и team_id в таблицу users?

Ответ №1:

Я бы предложил красноречивую модель под названием роли. Который будет отслеживать, у какого пользователя какая роль для какой команды. Бизнес-логика должна гарантировать, что в одной команде есть только один лидер, и что один игрок принадлежит только одной команде.

Роли таблиц

  • user_id
  • team_id
  • role_type_id

Таблица role_type (содержащая лидера и пользователя)

  • ID
  • Имя

Пользователи таблицы

  • ID
  • Имя

Табличные команды

  • ID
  • Имя