Laravel集团按月和总价记录

Vla*_*tus 2 laravel

你好我想尝试按月分组记录和订单总和价格

我试过这样的事

       $order = Order::select(DB::raw('sum(price) as sums'))->groupBy(function($date) {
    return Carbon::parse($date->created_at)->format('Y-m');

});
Run Code Online (Sandbox Code Playgroud)

但没有运气,我想获得我以后可以在数据表中实现的集合?

Ano*_*ain 6

请试试这个:

  $orders = Order::select(
            DB::raw('sum(price) as sums'), 
            DB::raw("DATE_FORMAT(created_at,'%M %Y') as months")
  )
  ->groupBy('months')
  ->get();
Run Code Online (Sandbox Code Playgroud)


小智 6

作为@Anowar Hossain答案的补充,您可以使用此解决方案进一步获取其他月份的索引,无论它们是否包含值。

$orders = Order::select(
            DB::raw('sum(price) as sums'), 
            DB::raw("DATE_FORMAT(created_at,'%M %Y') as months"),
            DB::raw("DATE_FORMAT(created_at,'%m') as monthKey")
  )
  ->groupBy('months', 'monthKey')
  ->orderBy('created_at', 'ASC')
  ->get();
Run Code Online (Sandbox Code Playgroud)

如果您只想提供当年的数据,您可以考虑这样做:

$orders = Order::select(
            DB::raw('sum(price) as sums'), 
            DB::raw("DATE_FORMAT(created_at,'%m') as monthKey")
  )
  ->whereYear('created_at', date('Y'))
  ->groupBy('monthKey')
  ->orderBy('created_at', 'ASC')
  ->get();
Run Code Online (Sandbox Code Playgroud)

然后创建一个包含 12 个零值的数组,如下所示:

$data = [0,0,0,0,0,0,0,0,0,0,0,0];

foreach($orders as $order){
    $data[$order->monthKey-1] = $order->sums;
}

return $data; // [0,10000,5000,7000,9000,0,0,0,0,15000,0,0]
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助那里的人!