Как объединить три результата отношения «многие ко многим» в одну коллекцию в Laravel?

#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 спасибо, я буду больше экспериментировать и попытаюсь придумать способ, как это осуществить. 🙂