laravel - Laravel 雄辩查询返回月订单总和
问题描述
到目前为止,我提出了这个查询:
Order::select(DB::raw('sum(price) as sums'),
DB::raw("DATE_FORMAT(created_at,'%e') as day")
)
->where('seller_id', Auth::user()->id)
->whereBetween('created_at', [Carbon::now()->startOfMonth()
->subMonth(),Carbon::now()->endOfMonth()->subMonth()])
->orderBy('created_at', 'asc')
->groupBy('day')
->get();
这将返回一个像这样的数组:
[{"sums":145867,"day":"3"},{"sums":19567,"day":"28"}]
这几乎是我需要的。我现在想在这些结果中包含月份的名称,如下所示:
[{"June" : {{"sums":145867,"day":"3"},{"sums":19567,"day":"28"}}}]
解决方案
简单,将月份添加到您的选择并使用集合方法 mapToGroups
如果您不想在结果数组中看到月份数 - 在回调中格式化结果数组
...
DB::raw("DATE_FORMAT(created_at,'%c') as month")
...
->get()
->mapToGroups(function ($item, $key) {
return [Carbon\Carbon::create()->month($item['month'])->format('M') => $item];
});
您也可以使用 DATE_FORMAT(created_at,'%b') 作为 MySQL 中的月份名称,并且不要在回调中使用 Carbon,但是,在我看来,这对可能的本地化不利。但是这种方式性能更有效
推荐阅读
- unit-testing - 如何在 Salesforce 中执行“lastmodified”日期的测试类覆盖?
- php - 如何获取当前页面菜单项祖先名称wordpress
- xcode - 在 Xcode 中向 UITest Target 添加 aps-environment 权利
- vb.net - VB.NET - 如何添加我的扩展
- java - BPXWUNIX:尝试运行 Regina Rexx 脚本时未发现错误
- html - 在另一个 HTML 文件中包含一个 HTML 文件
- python - 来自圆柱坐标的 Numpy 掩码
- c++ - 作为模板参数c ++给出的类的别名模板
- css - \e901 对 CSS 内容标签意味着什么?
- python - python3:在“app.py”中找不到“__main__”模块