Получить сумму минут указанного c проекта - PullRequest
0 голосов
/ 09 июля 2020

Я хочу получить общее количество минут. Пример: joylinkhk 240 + 180 = 420. Как получить общую минуту для определенного c пользователя?

введите описание изображения здесь

контроллер

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

HTML вид

@foreach($users as  $user)   
    <tr> 
      <td>{{$user->name}}
      </td>
      @foreach($user->hourlog  as   $hourlogs)
      <td>{{$hourlogs->hour_work}}
      </td>
      @endforeach
    </tr> 
@endforeach

Ответы [ 4 ]

3 голосов
/ 09 июля 2020
Коллекции

Laravel очень мощные и предлагают такую ​​функциональность прямо из коробки. Ниже приведен пример того, как вы можете взять коллекцию массивов и суммировать ее по свойству hour_work. Функция сбора - это быстрый способ создать коллекцию, подобную уже имеющейся $user->hourlog.

    collect([
      ['hour_work' => 198],
      ['hour_work' => 93],
      ['hour_work' => 51],
      ['hour_work' => 112],
    ])->sum('hour_work');
    // Result: 454
1 голос
/ 09 июля 2020

Как сказал @ danny-van-der-slui js, вы можете использовать sum в коллекции

@foreach($users as $user)   
    <tr> 
      <td>{{$user->name}}</td>
      @foreach($user->hourlog as $hourlogs)
          <td>{{$hourlogs->hour_work}}</td>
      @endforeach
    </tr>
@endforeach

<tr>
    <td>Grand Total</td>
    <td>{{ $users->sum(fn($user) => $user->hourlog->sum('hour_work')) }}</td>
</tr>

Примечание:

$users->sum(fn($user) => $user->hourlog->sum('hour_work')) 

Является стрелочная функция , которая поставляется с php 7.4, если вы используете версию ниже 7.4, вы должны сделать это следующим образом

$users->sum(function($user) {
    return $user->hourlog->sum('hour_work');
}); 
0 голосов
/ 09 июля 2020

Попробуйте это

используйте $sum_total = 0; $sum_total += $hourlogs->hour_work;

@foreach($users as  $user)   
    <tr> 
      <td>{{$user->name}}
      </td>
      @foreach($user->hourlog  as   $hourlogs)
      <td>{{$hourlogs->hour_work}}
      </td>
        @php
          $sum_total = 0; 
          $sum_total += $hourlogs->hour_work;
        @endphp
      @endforeach
    </tr>
    <tr>
       <td>{{ $sum_total }}</td>
    </tr>
@endforeach
0 голосов
/ 09 июля 2020

Вы можете суммировать foreach l oop, но получить результат за пределами foreach l oop. Сначала вам нужно определить переменную вне foreach $sum_total = 0;, затем вы можете суммировать внутри foreach следующим образом:

<?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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...