首页 > 解决方案 > 我如何使用 eloquent 总结不同的列类型

问题描述

我有一个名为wf_requesthas 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
}

这可以在一个数据库查询中运行吗?

标签: phplaraveleloquent

解决方案


我已经使用 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];
});

推荐阅读