SQL-запрос с GROUP BY и SUM в Eloquent - PullRequest
1 голос
/ 09 мая 2019

Я просто хочу сделать простой SQL-запрос в моем приложении laravel.

Мне не очень удобно с Eloquent ага.

Это запрос SQL, который я хочу сделать с помощью eloquent:

select user_id, project_id, sum(hours)
FROM time_entries
WHERE spent_on BETWEEN '2018-04-10' AND '2018-12-10'
GROUP BY user_id, project_id

Я пытался что-то вроде:

TimeEntries::whereBetween('spent_on', [($request->input('debut')), ($request->input('fin'))])->groupBy('user_id')->sum('hours');

(но вы можете видеть, что это безнадежно)

Ответы [ 4 ]

0 голосов
/ 09 мая 2019

Ниже будет работать запрос:

$query = TimeEntries::query();
$query->selectRaw('user_id', 'project_id', sum(hours))
->whereRaw("spent_on >= '2018-04-10' and spent_on <= '2018-12-10'")
->groupBy('user_id')
->groupBy('project_id');

$result = $query->get();
0 голосов
/ 09 мая 2019

Использовать selectRaw () .

TimeEntries::whereBetween('spent_on', [($request->input('debut')), ($request->input('fin'))])->groupBy(['user_id', 'project_id'])->selectRaw('user_id , project_id, sum(hours) as sum')->get();
0 голосов
/ 09 мая 2019

Вы можете использовать функцию selectRaw в Eloquent, например:

TimeEntries::selectRaw('user_id, project_id, sum(hours)')
    ->whereBetween(
        'spent_on',
        [ ($request->input('debut')), ($request->input('fin')) ]
    )
    ->groupBy('user_id', 'project_id');

Но имейте в виду, что не привязывать переменные в строковом параметре selectRaw, это может вызвать проблему внедрения SQL, так какобойти обходной чек

0 голосов
/ 09 мая 2019

Model-> select (DB :: raw ('user_id, project_id, SUM (часы)') -> whereBetween ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...