laravel框架中根据创建年月日汇总统计每天的金额

发布时间:2019-12-27 00:38:45 浏览数:119

按照年月日统计一个数据表中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)
  }
}