如何在雄辩的情况下计算每组中的iten数量

时间:2018-02-05 20:53:31

标签: php mysql laravel eloquent

我正在尝试根据他们的状态对某些记录条目进行分组,但是我只是不想要这些条目,而是我希望状态有多少条目

这是我的疑问:

CallItem::whereBetween('scheduled_date', [$startDate, $endDate])->get()->groupBy('status')->toArray()

结果就是这样:

array:4 [▼
  "swapping" => array:4 [▼
    0 => array:24 [▶]
    1 => array:24 [▶]
    2 => array:24 [▶]
    3 => array:24 [▶]
  ]
  "confirmed" => array:3 [▼
    0 => array:24 [▶]
    1 => array:24 [▶]
    2 => array:24 [▶]
  ]
  "canceled" => array:6 [▼
    0 => array:24 [▶]
    1 => array:24 [▶]
    2 => array:24 [▶]
    3 => array:24 [▶]
    4 => array:24 [▶]
    5 => array:24 [▶]
  ]
  "scheduled" => array:5 [▼
    0 => array:24 [▶]
    1 => array:24 [▶]
    2 => array:24 [▶]
    3 => array:24 [▶]
    4 => array:24 [▶]
  ]
]

但我想要这样的事情:

array:4[▼
   0 => 4,
   1 => 3,
   2 => 6,
   3 => 5
]

仅“交换,确认,取消,已安排”且没有索引的数组大小。

我该如何进行此查询?

2 个答案:

答案 0 :(得分:2)

如果您想使用数据库计数,可以使用DB::raw

$count = \DB::table('call_items')
            ->select(\DB::raw('count(status) as count'), 'status')
            ->groupBy('status')
            ->whereBetween('scheduled_date', [$startDate, $endDate])
            ->get();

这将返回多个对象,每个状态为statuscount

答案 1 :(得分:2)

map功能将是一个不错的选择。暂时不要致电$totals = $result->map(function ($item) { return $item->count(); });

$totals = CallItem::whereBetween('scheduled_date', [$startDate, $endDate])
                  ->get()
                  ->groupBy('status')
                  ->map(function ($group) { return $group->count(); });

所有在一起:

x

使用array_flatten删除索引。