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>
4 Réponses :
Model-> select (DB :: raw ('id_utilisateur, id_projet, SUM (heures) ') -> whereB Between ...
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();
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
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();