Je veux obtenir le nombre total de minutes. Exemple: joylinkhk 240 + 180 = 420. Comment puis-je obtenir une minute totale d'un utilisateur spécifique?
contrôleur strong >
@foreach($users as $user)
<tr>
<td>{{$user->name}}
</td>
@foreach($user->hourlog as $hourlogs)
<td>{{$hourlogs->hour_work}}
</td>
@endforeach
</tr>
@endforeach
Affichage HTML
public function search(Request $request) {
$date = explode(' - ', $request->date);
$auth = Auth::user();
$hourLog = Hourlog::with('project', 'user');
if ($auth->user_type == 1) {
$hourLog->where("user_id", $auth->id);
}
$data = [
"date" => $date,
// 'projects' => Project::whereIn('id', $request->project)->get(),
'projects' => Project::with('users')->whereIn('id', $request->project)->get(),
'users' => User::with(['hourlog' => function ($query) use ($request) {
$query->whereIn('project_id', $request->project);
}])->whereIn('id', $request->user)->get(),
];
return view('cms.projectreport.projectreport-list', $data);
}
3 Réponses :
Les collections Laravel sont très puissantes et offrent une telle fonctionnalité prête à l'emploi.
Voici un exemple de la façon dont vous pouvez prendre une collection de tableaux et additionner par sa propriété hour_work . La fonction de collecte est un moyen rapide de créer une collection comme le $ user-> hourlog l'est déjà.
collect([
['hour_work' => 198],
['hour_work' => 93],
['hour_work' => 51],
['hour_work' => 112],
])->sum('hour_work');
// Result: 454
Vous pouvez additionner dans la boucle foreach , mais obtenir le résultat en dehors de la boucle foreach . Vous devez d'abord définir la variable en dehors de foreach $ sum_total = 0; , puis vous pouvez additionner à l'intérieur de foreach comme ceci:
<?php $sum_total = 0; ?> // define here
@foreach($users as $user)
<tr>
<td>{{$user->name}}
</td>
@foreach($user->hourlog as $hourlogs)
<td>{{$hourlogs->hour_work}}
</td>
<?php
$sum_total += (intval)$hourlogs->hour_work
?>
@endforeach
</tr>
<tr>
<td>{{ $sum_total }}</td>
</tr>
@endforeach
On dirait que la balise @php n'a pas fonctionné, j'ai mis à jour, voulez-vous réessayer?
Comme @ danny-van-der-sluijs l'a dit, vous pouvez utiliser sum sur une collection
$users->sum(function($user) {
return $user->hourlog->sum('hour_work');
});
Remarque:
$users->sum(fn($user) => $user->hourlog->sum('hour_work'))