我正在尝试编写一个 Eloquent 查询,它每组最多返回 3 行(使用 groupBy)。 This post is similar但我不确定如何在此处应用该解决方案。
我的 MySQL 表交易有一个 Eloquent 模型 Deal
。每笔交易可以有四种类型
中的一种,因此最终应该最多有四组(如果没有某种类型
的交易,则应该更少)。
我试过 Deal::where('status', 'active')->groupBy('type')->get();
这会返回一个包含四个对象的数组(一个处理四种类型中的每一种),但是我期望有 12 笔交易,每组 3 笔(它们确实存在于数据库中)。同样,尝试 Deal::where('status', 'active')->groupBy('type')->take(3)->get();
返回一个包含三个对象的数组(现在缺少一组)。
到目前为止,我已经通过进行四个单独的数据库查询来完成此操作,四种类型中的每一种查询,但如果可以一次完成,我会更喜欢它。有什么想法吗?谢谢!
最佳答案
实现目标的方法之一是:
Deal:where('status', 'active')
->get()
->groupBy('type')
->map(function($deal) {
return $deal->take(3);
});
当然,您需要检查查询是否返回null
或empty
对象,请注意查询返回所有事件 Deal
(s)(过滤发生在 Collection
上)如果有很多 Deal
(s)
关于mysql - 在 Eloquent 中使用 groupBy 获取每组更多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31977915/