在 Eloquent 中使用 groupBy 为每组获取更多行

Mil*_*s P 2 mysql laravel eloquent laravel-5

我正在尝试编写一个雄辩的查询,每组最多返回 3 行(使用 groupBy)。这篇文章很相似,但我不确定如何在此处应用该解决方案。

我的DealMySQL 表交易有一个雄辩的模型。每个交易可以有四个中的一个types,因此最终最多应该有四个组(如果没有某个交易,则更少type)。

我已经尝试过Deal::where('status', 'active')->groupBy('type')->get();,这会返回一个包含四个对象的数组(四种类型中的每一种都有一个交易),但是我期待 12 个交易,每组 3 个(并且它们确实存在于数据库中)。类似地,尝试Deal::where('status', 'active')->groupBy('type')->take(3)->get();返回一个包含三个对象的数组(现在缺少一组)。

到目前为止,我已经通过创建四个单独的数据库查询来实现这一点,四种类型中的每一种查询一个,但如果可以在一个中完成,我更喜欢它。有什么想法吗?谢谢!

ami*_*mey 6

您可以实现您正在尝试做的事情的方法之一是:

Deal:where('status', 'active')
    ->get()
    ->groupBy('type')
    ->map(function($deal) {
        return $deal->take(3);
    });
Run Code Online (Sandbox Code Playgroud)

当然,您需要检查查询是否返回nullempty对象,并请注意查询返回所有活动的 Deal(s)(过滤发生在Collection),如果有很多Deal(s)可能效率不高