我有一个Album
模型。 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;
}
}
这是工作,但我必须从事件,而不是专辑开始。我不知道如何让所有这些关系一起工作。事件 - >相册 - >图片并将其显示到视图中。
您是否尝试过类似$事件::用([ '相册'=>函数($ Q) {$ Q->与( '图片') - > orderByRaw( 'RAND()') - >取(2); }]); – cubiclewar 2014-10-03 00:52:46
您不能在预先加载的查询中使用'take'来为每个相册加载2张图片,它会将所有图片限制为2.请阅读以下内容:http://softonsofa.com/tweaking-eloquent-relations-how-to-get -n-related-models-per-parent/ – 2014-10-03 07:21:13
@cubiclewar不幸的是我得到了'调用未定义方法Illuminate \ Events \ Dispatcher :: with()' @JarekTkaczyk哇,这似乎很痛苦!所有这些代码只是为了查询一些关系?你确定没有简单的方法来做到这一点? – Flobesst 2014-10-03 15:05:29