如何提取两列的总和以及 laravel 中的关系计数?
How to pull sum of two columns along with the count of a relation in laravel?
我有两个表:买家和订单。一位买家有很多订单。
我想要所有买家以及特定时间段内订单的订单数量和订单两列(价格、费用)的总和。我可以通过执行以下操作来获得计数,
Buyer::withCount([
'orders' => fn ($query) => $query
->where('created_at', '>=', $dateTo)
])
->get();
但是如何获取指定时间段 ([=12=]) 的总和?
要在闭包中使用变量,您需要使用 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();
与您 withSum() 的方式相同,这里是您可以做到的方式
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();
我有两个表:买家和订单。一位买家有很多订单。
我想要所有买家以及特定时间段内订单的订单数量和订单两列(价格、费用)的总和。我可以通过执行以下操作来获得计数,
Buyer::withCount([
'orders' => fn ($query) => $query
->where('created_at', '>=', $dateTo)
])
->get();
但是如何获取指定时间段 ([=12=]) 的总和?
要在闭包中使用变量,您需要使用 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();
与您 withSum() 的方式相同,这里是您可以做到的方式
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();