如何运行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之间编写雄辩的查询并按日期过滤。应该在控制器中完成。
答案 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);
在此代码中,我们首先分离通道,然后使用它们来计算所需的结果。顺便说一句,代码已经过测试。