#laravel #laravel-5 #many-to-many
#laravel #laravel-5 #многие ко многим
Вопрос:
У меня есть отношение «многие ко многим» между следующими:
актер <-> театральная_игра, актер <-> мюзикл, актер <-> балетная_игра
Как я могу создать единый массив для отображения всех результатов этих отношений в Laravel?
Теперь у меня есть:
$actor->theaterPlays
, $actor->musicals
, $actor->balletPlays
И мне нужно иметь что-то вроде этого:
$actor->allPerformances
Редактировать:
И я должен упорядочить их по имени или по дате выполнения и т.д.
Комментарии:
1. Вы пытались загрузить несколько отношений с готовностью? например
$performances = AppActor::with(['theaterPlays', 'musicals', 'balletPlays'])->get();
?2. Да, но не удается получить к ним доступ из «отношения». Есть ли способ сделать это из модели actor?
Ответ №1:
Однако, вы должны быть в состоянии создать новый аксессуар в вашей Actor
модели, который отвечает за объединение всех типов вместе:
public function getAllPerformancesAttribute()
{
return $this->theaterPlays()
->get()
->merge($this->musicals()->get())
->merge($this->balletPlays()->get())
->all();
}
Комментарии:
1. Спасибо!! С помощью этого я могу упорядочить их по дате создания, или по дате воспроизведения, или по имени, или по тому, что я хочу, верно?
2. @Emmanuel-Ab Не с обычными методами запроса eloquent нет. Сначала вам нужно будет удалить
->all()
, чтобы массив не возвращался. Во-вторых, вам нужно будет использовать методы сбора. Однако с такими потребностями я бы не сказал, что это лучшее решение.3. @thisskelvin спасибо, я буду больше экспериментировать и попытаюсь придумать способ, как это осуществить. 🙂