我正在尝试编写一个雄辩的查询,该查询最多返回每个组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);
    });

当然,您需要检查查询是否返回nullempty对象,请注意,查询返回所有活动的Deal(过滤发生在Collection上),如果存在大量的Deal,则可能无效

关于mysql - 在Eloquent中使用groupBy获得每个组更多的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31977915/

10-12 01:13