我有一个简单的相册和图片设置,每个相册有很多图片。我可以正常获取所有数据,但是我想限制返回的图片数量为3。我尝试传递一个闭包来实现:
Album::with(['images' => function($query) { $query->take(3);}])->get();
这会将图片数量限制为3,但我想把每个相册的图片数量都限制为3。第一个相册将展示3张照片,但所有其他相册都没有照片。
我尝试向模型中添加新的方法,像这样:
public function limitImages()
{
return $this->hasMany('App\Image')->limit(3);
}
我在控制器中调用了以下代码:
Album::with('limitImages')->get();
但这并不限制返回的图像数量。
$query->limit(3)
,而不是take(3)
了吗? - GiamPyAlbum::with('images')->get()
,并且数据库中只有3个相册(具有id:1、2和3)。Laravel在后台执行下面的两个查询:首先是select * from albums
,这将返回相册,并将id放入数组中([1, 2, 3]),然后它执行select * from images where in alubm_id [1, 2, 3]
。如果您能告诉我如何编写SQL以将第二个查询限制为每个相册的3张图片,我将把它放入查询构建器中(我擅长Laravel - 特别是Eloquent方面,但不太擅长SQL)。但我很确定没有简单的方法可以做到这一点。 - DevKAlbum
)都有一个子级(Image
)的关系,限制为X条目。唯一的例外是我在->with([...])
函数中使用limit()
而不是take()
。也许是你使用的DB类型有问题?我正在使用MySQL
,但我没有看到你指定你正在使用什么。 - Tim Lewis