我正在尝试编写一个雄辩的查询,该查询最多返回每个组3行(使用groupBy)。This post is similar但我不确定如何在这里应用该解决方案。
对于我的MySQL表交易,我有一个雄辩的模型Deal
。每个交易可以有四个types
中的一个,因此最终最多应该有四个组(如果没有某个type
的交易,则应少于四个组)。
我已经尝试了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
(过滤发生在Collection
上),如果存在大量的Deal
,则可能无效关于mysql - 在Eloquent中使用groupBy获得每个组更多的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31977915/