Php 使用sum和groupBy的带条件的Laravel雄辩查询

Php 使用sum和groupBy的带条件的Laravel雄辩查询,php,laravel,eloquent,sum,Php,Laravel,Eloquent,Sum,假设我们有一个像亚马逊这样的网站,用户也是卖家。我们有三种型号:用户、产品和订单 产品具有代表卖方的用户id,订单具有代表买方的用户id 每个订单只针对一个产品 下面的函数将获取所有订单,但用户购买了他们正在销售的产品的订单除外。然后,订单按年份和月份分组 $orders_per_month = Order::whereHas('product',function($q) { $q->whereRaw('products.user_id != orders.user_id'); })-

假设我们有一个像亚马逊这样的网站,用户也是卖家。我们有三种型号:用户、产品和订单

产品具有代表卖方的用户id,订单具有代表买方的用户id

每个订单只针对一个产品

下面的函数将获取所有订单,但用户购买了他们正在销售的产品的订单除外。然后,订单按年份和月份分组

$orders_per_month = Order::whereHas('product',function($q) {
  $q->whereRaw('products.user_id != orders.user_id');
})->get()->groupBy(function($v) {
  return Carbon::parse($v->created_at)->format('Ym');
});

但我需要的不是每年和每月这些订单的列表,而是每年和每月这些订单的“金额”属性的总和。

添加一个映射以迭代每个组并获得总和

$orders_per_month = Order::whereHas('product',function($q) {
  $q->whereRaw('products.user_id != orders.user_id');
})->get()->groupBy(function($v) {
  return Carbon::parse($v->created_at)->format('Ym');
});
$orders_per_month = Order::whereHas('product',function($q) {
  $q->whereRaw('products.user_id != orders.user_id');
})->get()->groupBy(function($v) {
  return Carbon::parse($v->created_at)->format('Ym');
})->map(function ($group, $key) {
    return [$key => $group->sum('amount')];
});