php - Laravel Eloquent 关系的限制结果

标签 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);
}

我在我的 Controller 中调用它:
Album::with('limitImages')->get();

但这根本不限制返回的图像计数

最佳答案

我觉得你会很快遇到 N+1 问题试图完成这个。只需在它返回的集合中执行此操作:

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

关于php - Laravel Eloquent 关系的限制结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43097559/

相关文章:

php - WordPress 循环 : how to wrap each 3 posts into a div?

php - 如何在页面提交和重新加载后保留复选框的选中状态?

laravel - OrderBy 工作但不是在哪里

php - 根据 laravel 中的 created_at 字段选择记录

php - 覆盖 Eloquent 查询生成器

php - 代表用户从 Instagram 获取公共(public)内容

php - Codeigniter RESTful API

laravel - Ziggy 路由器默认为查询字符串

php - 如何在 Laravel 5.5 中设置事务隔离级别?

php - 按月分组并在 Laravel Eloquent 上对日期进行排序