首页  >  问答  >  正文

如何在laravel中计算两列的总和以及关联关系的数量?

我有两个表:买家和订单。买家有很多订单。

我想要所有买家以及特定时间段内订单数和两列订单(价格、费用)的总和。我可以通过执行以下操作来获取计数,

Buyer::withCount([
    'orders' => fn ($query) => $query
        ->where('created_at', '>=', $dateTo)
])
->get();

但是如何获得指定时间段的总和(->where('created_at', '>=', $dateTo))?

P粉788571316P粉788571316215 天前438

全部回复(2)我来回复

  • P粉567112391
  • P粉189606269

    P粉1896062692024-02-22 00:03:31

    要在闭包内使用变量,您需要使用 use() 将其值发送到该函数。

    用于使用 withSum({relation},{column}) 你需要为每个单独调用。

    Buyer::withCount([
            'orders' => function ($query) use ($dateTo) { 
                $query->where('created_at', '>=', $dateTo);
            }
        ])
        ->withSum([
            'orders' => function ($query) use ($dateTo) { 
                $query->where('created_at', '>=', $dateTo);
            }
        ], 'price')
        ->withSum([
            'orders' => function ($query) use ($dateTo) { 
                $query->where('created_at', '>=', $dateTo);
            }
        ], 'charge')
        ->get();

    withSum() 仅在 Laravel 版本 8 或更高版本中可用。

    编辑箭头函数语法

    Buyer::withCount([
            'orders' => fn ($query) $query->where('created_at', '>=', $dateTo),
        ])
        ->withSum(['orders' => fn ($query) $query->where('created_at', '>=', $dateTo)], 'price')
        ->withSum(['orders' => fn ($query) $query->where('created_at', '>=', $dateTo)], 'charge')
        ->get();

    回复
    0
  • 取消回复