Конвертировать необработанный запрос в красноречивый - PullRequest
0 голосов
/ 27 ноября 2018

Я написал это и работал как необработанный запрос SQL, но я пытаюсь преобразовать его в более понятный дизайн eloquent / построителя запросов Laravel вместо простого запроса.

Моя структура таблицы выглядит следующим образом:

Table One (Name model)
______________
| id  | name |
|------------|
| 1   | bob  |
| 2   | jane |
--------------

Table Two (Date Model)
_________________________________
| id  | table_1_id | date       |
|-------------------------------|
| 1   | 1          | 2000-01-01 |
| 2   | 1          | 2000-01-31 |
| 4   | 1          | 2000-02-28 |
| 5   | 1          | 2000-03-03 |
| 6   | 2          | 2000-01-03 |
| 7   | 2          | 2000-01-05 |
---------------------------------

Я возвращаю только самые высокие (самые последние) даты из таблицы 2 (модель дат), которые соответствуют пользовательскому бобу из таблицы 1 (модель имени).

Например,в приведенном выше примере я возвращаю это из моего запроса

2000-01-31

2000-02-28

2000-03-03

Вот что я делаю сейчас (это работает), но я просто не уверен, как использовать YEAR, MONTH и MAX с laravel.

DB::select(
  DB::raw("
    SELECT MAX(date) as max_date
    FROM table_2
    INNER JOIN table_1 ON table_1.id = table_2.table_1_id
    WHERE table_1.name = 'bob'
    GROUP BY YEAR(date), MONTH(date)
    ORDER BY max_date DESC
  ")
);

1 Ответ

0 голосов
/ 27 ноября 2018

Попробуйте этот код, если возникнут проблемы,

DB::table('table_1')->join('table_2', 'table_1.id','=','table_2.table_1_id')
    ->select(DB::raw('MAX(date) as max_date'),DB::raw('YEAR(date) year, MONTH(date) month'),'table_1.name')
    ->where('name','bob')
    ->groupBy('year','month')
    ->orderBy('max_date')
    ->get();

Если возникнут проблемы с приведенным выше кодом, не стесняйтесь спрашивать.

...