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();返回一个包含三个对象的数组(现在缺少一组)。
到目前为止,我已经通过创建四个单独的数据库查询来实现这一点,四种类型中的每一种查询一个,但如果可以在一个中完成,我更喜欢它。有什么想法吗?谢谢!
您可以实现您正在尝试做的事情的方法之一是:
Deal:where('status', 'active')
->get()
->groupBy('type')
->map(function($deal) {
return $deal->take(3);
});
Run Code Online (Sandbox Code Playgroud)
当然,您需要检查查询是否返回null或empty对象,并请注意查询返回所有活动的 Deal(s)(过滤发生在Collection),如果有很多Deal(s)可能效率不高
| 归档时间: |
|
| 查看次数: |
3138 次 |
| 最近记录: |