1
votes

Requête SQL avec GROUP BY et SUM dans Eloquent

Je veux juste faire une simple requête SQL dans mon application laravel.

Je ne suis pas très à l'aise avec Eloquent aha.

Voici la requête SQL que je veux faire avec eloquent: p>

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

J'ai essayé quelque chose comme:

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

(mais vous pouvez voir que c'est sans espoir)

p>


0 commentaires

4 Réponses :


-1
votes

Model-> select (DB :: raw ('id_utilisateur, id_projet, SUM (heures) ') -> whereB Between ...


0 commentaires

0
votes

Utilisez 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 commentaires

0
votes

Vous pouvez utiliser la fonction selectRaw d'Eloquent, comme ceci:

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

Mais sachez que ne pas lier des variables dans le paramètre de chaîne selectRaw , cela peut causer un problème d'injection SQL car il contourne la vérification d'échappement


0 commentaires

0
votes

La requête ci-dessous fonctionnera:

$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 commentaires