Laravel: нетерпеливая загрузка с 3 «отношениями»

У меня есть Album модель. Album может иметь много Event и много Picture но Event принадлежит одному Album и один Picture принадлежит одному Album тоже.

Я пытаюсь составить список событий. В каждом случае я хотел бы отобразить название альбома и 3 случайных изображения из этого альбома.

Я думаю, что для этого мне нужно использовать Eager Loading, но я немного запутался. В настоящее время я могу иметь список альбомов и сделать из них 3 случайных изображения, например:

$albums = Album::with(array('pictures' => function($query) {
$query->orderByRaw("RAND()")->take(2);
}))->get();

foreach ($albums as $album) {

echo $album->title;

foreach ($album->pictures as $picture) {

echo $picture->filename;

}

}

Это работает, но я должен начать с событий, а не альбомов. Я не знаю, как заставить все эти отношения работать вместе. Событие -> Альбом -> Изображения и отобразить их в виде.

0

Решение

Тогда вам нужно one-to-many отношения и вам нужно создать методы отношений для обеих сторон, например:

В Event модель:

public function album()
{
return $this->belongsTo('Album', 'album_id');
}

В Album модель:

public function events()
{
return $this->hasMany('Event', 'album_id');
}

public function pictures()
{
return $this->hasMany('Picture', 'album_id');
}

Итак, теперь вы можете начать с Event, например:

$events = Event::with('album.pictures')->get(); // or paginate(10), 10 per page
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]