У меня есть модель Album
. A Album
может иметь много Event
и много Picture
, но Event
принадлежит к одному Album
и одному Picture
принадлежит к одному Album
.Laravel: Искренняя загрузка с 3 "отношениями"
Я пытаюсь составить список событий. В каждом случае я хотел бы отобразить название альбома и 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;
}
}
Это работает, но я должен начать с событий, а не альбомы. Я не знаю, как заставить все эти отношения работать вместе. Событие -> Альбом -> Изображения и отображение их в виде.
Вы пробовали что-то вроде $ Event :: с ([ 'Альбом' => функция ($ д) { $ q-> с ('Picture') -> orderByRaw ('RAND()') -> взять (2); }]); – cubiclewar
Вы не можете использовать 'take' на загруженном запросе для загрузки 2 снимков на альбом, это ограничит все снимки до 2. Прочтите это: http://softonsofa.com/tweaking-eloquent-relations-how-to-get -n-related-models-per-parent/ –
@cubiclewar, к сожалению, я получаю 'Call to undefined method Illuminate \ Events \ Dispatcher :: with()' @JarekTkaczyk ничего себе, это кажется очень болезненным! Весь этот код просто запрашивает некоторые отношения? Вы уверены, что нет простого способа сделать это? – Flobesst