#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
- Имя