php - 我如何使用 eloquent 总结不同的列类型
问题描述
我有一个名为wf_request
has an attribute的表status[1, 2, 3]
,因此我需要将这些属性的每一个汇总在一列中,并将它们全部汇总在一个数据库查询中。
wf_request 表:
wf_request_id,
name,
status
wf_request_id name status
1 A 1
2 B 2
3 C 1
4 D 3
并像这样使用 eloquent 来获得结果:
wf_request::get()->select('wf_request_id',
DB::raw('sum(wf_request_id when status = 1 then 0 END) as `medium`'),
DB::raw('sum(wf_request_id when status = 2 then 0 END) as `small`')
)->groupBy('wf_request_id')
所以我的问题是我怎么能得到这样的结果:
{
medium: 2
small:1
}
这可以在一个数据库查询中运行吗?
解决方案
我已经使用 Laravel 的 Eloquent 方式重写了代码。让我们知道这是否有意义。
$statuses = wf_request::all()->groupBy('status');
$statuses->keys()->map(function($status) use ($statuses) {
$total = $statuses[$status]->reduce(function($mem, $item) {
return $mem + 1;
}, 0);
switch($status){
case 1:
$new_status = "medium";
break;
case 2:
$new_status = "small";
break;
default:
$new_status = "none";
break;
}
return [$new_status => $total];
});
推荐阅读
- c# - 将正确信息添加到新工作表
- ios - Core Data + CloudKit 不会在其他设备上自动刷新?
- c# - 获取由空格分隔的字符串的最后一个元素
- javascript - 导入 csv 数据时解析带有日期的标题行
- android - NativeScript-vue 中的异步/等待。为什么对话框不会以正确的顺序显示_?
- javascript - ChartRangeFilter 作为谷歌时间线图表的缩放功能,它从带有数据视图的专用谷歌电子表格中读取数据
- c# - 在 LINux 上使用 .Net Core 和 OpenGL
- java - 基于 findElements 循环遍历列表是如何工作的?
- kubernetes - 防止 Terraform 模块使用默认 kubeconfig
- c++ - ASIOSDK;从 hostsample.cpp 构建 mex 文件时出错