按照年月日统计一个数据表中amount字段的总金额 amount为收入字段
public function groupAmount($condition, $field='amount')
{
$records = self::selectRaw("SUM({$field}) as total_amount,DATE_FORMAT(created_at,?) AS y,DATE_FORMAT(created_at,?) AS ym,DATE_FORMAT(created_at,?) AS ymd",['%Y','%Y-%m','%Y-%m-%d'])
->where($condition)->groupBy(['y', 'ym', 'ymd'])->get()->toArray();
$yearArr = [];
$monthArr = [];
$dayArr = [];
array_map(function($payOrder) use (&$yearArr, &$monthArr, &$dayArr){
$yearArr[$payOrder['y']][] = $payOrder['total_amount'];
$monthArr[$payOrder['ym']][] = $payOrder['total_amount'];
$dayArr[$payOrder['ymd']][] = $payOrder['total_amount'];
},$records);
$year = array_map(function ($oneArr){
return array_sum($oneArr);
},$yearArr);
$month = array_map(function ($oneArr){
return array_sum($oneArr);
},$monthArr);
$day = array_map(function ($oneArr){
return array_sum($oneArr);
},$dayArr);
return compact('year','month','day');
}
返回结果为:
array(3) {
["year"]=>
array(2) {
[2019]=>
int(2311210)
[2020]=>
int(39600)
}
["month"]=>
array(3) {
["2019-11"]=>
int(84800)
["2019-12"]=>
int(2226410)
["2020-01"]=>
int(39600)
}
["day"]=>
array(9) {
["2019-11-13"]=>
int(84800)
["2019-12-17"]=>
int(1118410)
["2019-12-18"]=>
int(112000)
["2019-12-23"]=>
int(783000)
["2019-12-24"]=>
int(100000)
["2019-12-26"]=>
int(113000)
["2020-01-02"]=>
int(1600)
["2020-01-10"]=>
int(33000)
["2020-01-13"]=>
int(5000)
}
}