Laravel pivot or model при связи трёх таблиц, что лучше использовать?
Суть вопроса, что лучше использовать.
Для примера возьмём бд фильмов:
table movie (фильмы)
id
name
table person (люди - актёры, сценаристы, операторы и другие)
id
name
table role (роль - актёр, сценарист, гример)
id
name
Как лучше связать их, чтобы определить роль. Например, в фильме может актер и сценарист один и тот же человек.
Как вариант pivot:
movie_id, role_id, person_id
Можно создать отдельную модель, например PersonRole:
id, role_id, person_id
и pivot: movie_id, person_role_id
Какой вариант будет лучше? Или это как-то по другому реализовывается? Интересует с точки построения архитектуры.
movie_person (movie_id person_id) person_role (person_id role_id)
связать все belongsToMany.
Только я бы role переименовал т.к. это ближе к системным ролям юзеров, а не контенту.
Хм.. Теряется связь. Мы знаем, что какие люди связаны с фильмом. И знаем чем люди занимаются. Но чем люди занимаются в фильме уже нет.
Фильмы:
1, Фильм
2, Кино
Люди:
1, Иван
2, Андрей
Роли (или занятие):
1, Актер
2, Режиссер
Как получить, что у Фильма(1) Актёр Иван и Режиссёр Иван
movie_person (movie_id person_id)
1, 1
1, 1 ??
Либо как вариант в связующей таблице сделать поля movie_id, person_id, role
И в поле role писать саму роль actor, director и т. д.
Значение role можно легко получить, если в модели обозначить отношение «многие ко многим» в модели
foreach ($film->persons as $person) {
echo $person->pivot->role;
}