Laravel Carbon获得特定月份值的总和

时间:2018-12-30 07:17:39

标签: laravel laravel-blade php-carbon

我有一个带有列的表-开始,停止,机械,人工工时。基本上,它记录了技工的工作时间。 我试图在模板中显示每个机械师的每月工作时间。

控制器:

public function index()
{

    $subith = Laborhrs::all()->where('mechanic','7');
    return view('reports.labour_monthly')->with('subith',$subith);
}

模板:

    @foreach($subith as $subith)
    <tr>
        <td>{{\Carbon\Carbon::parse($subith->stop)->format('M')}}</td>
        <td>{{$subith->labor_hrs}}</td>
    </tr>
    @endforeach

我得到这样的结果:

enter image description here

我需要得到它-该员工的9月总计和10月份的总计。我想念什么?

1 个答案:

答案 0 :(得分:1)

选项1:在查询中分组

控制器:

public function index()
{
    $subiths = Laborhrs::selectRaw('MONTH(stop) as month, sum(labor_hrs) as sum')
        ->where('mechanic', 7)
        ->groupBy('month')
        ->orderByDesc('stop')
        ->get();

    return view('reports.labour_monthly', compact('subiths'));
}

查看:

@foreach($subiths as $subith)
    <tr>
        <td>{{ date("F", mktime(0, 0, 0, $subith->month, 1)) }}</td>
        <td>{{ $subith->sum }}</td>
    </tr>
@endforeach

选项2:分组查询结果

如果每个机械师上有大量数据,请不要使用此选项。

控制器:

public function index()
{
    $subiths = Laborhrs as sum')::where('mechanic', 7)
        ->orderByDesc('stop')
        ->get();

    $grouped = $subiths->groupBy(function($item){
       return \Carbon\Carbon::parse($item->stop)->format('F');
    });

    return view('reports.labour_monthly', compact('grouped'));
}

查看:

@foreach($grouped as $month => $group)
    <tr>
        <td>{{ $month }}</td>
        <td>{{ $group->sum('labor_hrs') }}</td>
    </tr>
@endforeach