php - Laravel 5.4 中的 Group By 替代方案

标签 php mysql laravel eloquent laravel-5.4

我有一个包含 3 列(id、ref_number、pay_date)的表 Schedule。每个 ref_number 在每个月都有一个 pay_date。所以表格看起来像这样:

id | ref_number | pay_date
-----------------------------
1  | A001       | 2018-06-29
1  | A001       | 2018-07-29
1  | A002       | 2018-06-30
1  | A002       | 2018-07-30
1  | A002       | 2018-08-30
1  | A003       | 2018-06-29

我只想为每个 ref_number 获取 pay_date 在今天和某个日期(从今天起 30 或 31 天)之间的最早记录。下面的查询在 Mysql 中运行良好(我稍后会动态传递日期)。

 SELECT id,ref_number,MIN(pay_date) FROM schedule
 WHERE  (pay_date BETWEEN '2018-06-30' AND '2018-07-30')
 GROUP BY ref_number

我知道我们可以在数据库配置文件中将 mysql 的“strict”设置为 false,并且 Group By 会按预期运行,但无需更改是否有其他解决此问题的方法?

这个查询的 Eloquent 等效项是什么?有或没有 groupby。

最佳答案

搜索了一段时间后,我找到了使用嵌套选择 语句的答案,并在 Laravel 中尝试了一下。它完全按照我的意愿工作。这是一段甜蜜的代码:

Schedule::select(DB::raw(id, ref_number, MIN(pay_date) as pay_date))
          ->from(DB::raw("(SELECT * 
                       FROM schedule 
                       WHERE (pay_date > CURDATE())) 
                       temp")
                      )
          ->groupBy('temp.ref_number')
          ->get();

关于php - Laravel 5.4 中的 Group By 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51112453/

相关文章:

php - jquery:ajax 请求不起作用

php - Laravel 的 belongsTo 关系

php - JSON 编码帮助

php - Codeigniter 显示错误 : mysql_real_escape_string() expects parameter 2 to be resource, bool 值给定

php - 如何在 Blade 文件中的输入字段下方显示错误消息 - Laravel

php - Laravel 变形关系

php - HTML5音频是静态文件时在iOS中显示 “live broadcast”

PHP 打印 2 个查询集而不想要

mysql - 连接上的 WHERE 子句使执行时间增加 4 秒

javascript - jQuery get() 请求在新数据提交之前检索数据