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

标签 mysql laravel laravel-5 eloquent

我正在尝试编写一个 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);
    });

当然,您需要检查查询是否返回nullempty 对象,请注意查询返回所有事件 Deal(s)(过滤发生在 Collection 上)如果有很多 Deal(s)

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

相关文章:

mysql - 如何在表中迭代两次?

mysql - Ruby Mysql - 加载 .sql 文件并执行

php - laravel 护照未经身份验证返回

php - 在 Laravel 5 中创建管理员区域界面的最佳实践

MySQL日期格式和解析

laravel - 测试 Laravel Controller 的 try catch

laravel - 如何将 Blade 文件转换为 HTML 并保存?

laravel - 具有授权码授予的 lucadegasperi oauth2-server 给出 invalid_client 错误

php - Laravel 策略忽略查看、更新和删除,但创建工作正常

mysql - 如何根据 Group BY 列对两个查询的结果求和?