php - Laravel - 每日、每周、每月和每年的收入报告
问题描述
如何运行 Laravel Eloquent 查询来检索每日、每周、每月和每年的收入报告。
表:收入
编号 | 频道 | 金额 | created_at
1 | 大理石 | 3400 | 2012 年 9 月 10 日
2 | 黄金 | 3400 | 2012 年 8 月 10 日
3 | 大理石 | 4500 | 2012 年 7 月 10 日
4 | 银 | 3200 | 22/09/12
5 | 银 | 3400 | 2012 年 9 月 10 日
6 | 银 | 790 | 22/09/12
7 | 黄金 | 1000 | 2012 年 9 月 8 日
8 | 大理石 | 9000 | 22/09/12
预期结果:以下是不准确的示例结果
日期 | 频道 | 每周收入 | 月收入 | 年收入 | 总收入
2017 年 2 月 2 日 | 黄金 | 200 | 5400 | 第3244章 90222
日期 | 银 | 600 | 4300 | 983 | 10000
如上所述,我想按渠道和 created_at (日期)分组来汇总金额(收入)。如何编写雄辩的查询并在使用 created_at 之间按日期过滤。它应该在控制器中完成。
解决方案
如果您的频道有限(例如 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);
在这段代码中,我们首先分离通道,然后使用它们来计算所需的结果。顺便说一句,代码是要测试的。
推荐阅读
- c# - Netcore2.2 应用程序在 Linux 机器上的发布配置中中止
- css - 最大宽度处于活动状态时裁剪图像
- apache-spark - Databricks -> 雪花:SQL 编译错误:阶段:'XYZ' 不能是管道定义中的临时阶段
- python - python:我的日期索引有什么问题?
- css - 从大字体到小字体的动画弄乱了定位
- linux - 手动运行 Logstash 时使用 ~/ 无法识别 MSSQL JDBC 驱动程序库路径
- encryption - 如何解密 RSA 加密?
- java - 将 javaFX 客户端连接到 NodeJs 服务器
- php - PHP - 修改格式化数组
- excel - VBA过滤器基于以5秒的倍数结束的时间