Laravel-每日,每周,每月和每年收入报告

时间:2019-06-29 21:33:10

标签: php laravel eloquent

如何运行Laravel Eloquent查询来检索每日,每周,每月和每年的收入报告。

表格:收入

id |频道|金额| created_at

1 |乱石3400 | 2012年9月10日

2 |黄金| 3400 | 2012年8月10日

3 |乱石4500 | 2012年7月10日

4 |银| 3200 | 2012年9月22日

5 |银| 3400 | 2012年9月10日

6 |银| 790 | 2012年9月22日

7 |黄金| 1000 | 2012年9月8日

8 |乱石9000 | 2012年9月22日

预期结果:以下是示例结果不准确

日期|频道|每周收入|月收入|年收入|总收入

2017年2月2日|黄金| 200 | 5400 | 3244 | 90222

日期|银| 600 | 4300 | 983 | 10000

我想如上所述汇总金额(收入),也许按渠道分组并创建日期(日期)。如何在使用created_at之间编写雄辩的查询并按日期过滤。应该在控制器中完成。

1 个答案:

答案 0 :(得分:0)

如果频道有限(例如5-20),请使用以下代码:

<?php
$items = Revenue::groupBy('channel')->get(['channel']);
$re = [];
foreach ($items as $key => $value) {
    $re['daily'][$value] = Revenue::where('channel',$value)->whereDate('created_at',date('Y-m-d'))->sum('amount');
    $re['weekly'][$value] = Revenue::where('channel',$value)->whereBetween('date', [
        Carbon::parse('last monday')->startOfDay(),
        Carbon::parse('next friday')->endOfDay(),
    ])->sum('amount');
    $re['monthly'][$value] = Revenue::where('channel',$value)->whereMonth('created_at',date('m'))->sum('amount');
    $re['yearly'][$value] = Revenue::where('channel',$value)->whereYear('created_at',date('Y'))->sum('amount');
}

var_dump($re);

在此代码中,我们首先分离通道,然后使用它们来计算所需的结果。顺便说一句,代码已经过测试。