Laravel Eloquent限制了关系的结果

时间:2017-03-29 15:15:08

标签: php laravel eloquent

我有一个简单的专辑和图像设置,每张专辑都有很多图像。我可以获得所有数据,但我想将返回的图像数限制为3.我试过传递一个这样的闭包:

Album::with(['images' =>  function($query) { $query->take(3);}])->get();

这确实将图像数量限制为3,但它将图像总数限制为3,但我想将每个相册限制为3张图像。因此,第一张专辑将按预期显示3张图像,但所有其他专辑都没有图像。

我尝试过为我的模型添加一个新方法,如下所示:

public function limitImages()
{
    return $this->hasMany('App\Image')->limit(3);
}

我在控制器中调用它:

Album::with('limitImages')->get();

但这并不限制所有

返回的图像数量

2 个答案:

答案 0 :(得分:7)

我觉得你很快就遇到了N + 1问题,试图做到这一点。只需在它返回的集合中执行:

Album::with('images')->get()->map(function($album) {
    $album->setRelation('images', $album->images->take(3));
    return $album;
});

答案 1 :(得分:0)

如果发现以下内容:https://github.com/staudenmeir/eloquent-eager-limit 解决本地行为