首页 > 解决方案 > 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 之间按日期过滤。它应该在控制器中完成。

标签: phplaraveleloquent

解决方案


如果您的频道有限(例如 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);

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


推荐阅读