Группа By альтернатива в Laravel 5.4 - PullRequest
0 голосов
/ 30 июня 2018

У меня есть таблица Расписание с 3 столбцами ( id, ref_number, pay_date ). Каждый 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 будет вести себя как положено, но без необходимости изменять, есть ли другой способ обойти эту проблему?

Что было бы красноречивым эквивалентом для этого запроса? С или без группового.

1 Ответ

0 голосов
/ 30 июня 2018

Пройдя поиск, я наткнулся на ответ, используя оператор nested select , и попробовал его в 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();
...