0
votes

Obtenez la somme des minutes d'un projet spécifique

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?

 entrez la description de l'image ici

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);
}


0 commentaires

3 Réponses :


3
votes

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


0 commentaires

0
votes

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


1 commentaires

On dirait que la balise @php n'a pas fonctionné, j'ai mis à jour, voulez-vous réessayer?



1
votes

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')) 


0 commentaires