我正在尝试根据他们的状态对某些记录条目进行分组,但是我只是不想要这些条目,而是我希望状态有多少条目
这是我的疑问:
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
]
仅“交换,确认,取消,已安排”且没有索引的数组大小。
我该如何进行此查询?
答案 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();
这将返回多个对象,每个状态为status
和count
。
答案 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删除索引。