我有一个简单的查询:
$events = EventHistory::where('u_h_id', $id)
->where('has_read', 0)
->get(['event_type']);
这将返回如下所示的结果:
[
{
event_type: 1
},
{
event_type: 2
},
{
event_type: 2
},
{
event_type: 4
},
{
event_type: 6
},
{
event_type: 1
},
{
event_type: 3
},
{
event_type: 1
},
{
event_type: 4
},
{
event_type: 1
},
{
event_type: 4
},
{
event_type: 4
}]
但现在我需要一种方法来计算具体的值,这样我就可以返回现在在不同的事件类型中存在很多结果
例如,在上面的结果我想要返回
$type1 = 4;
$type2 = 2;
$type3 = 1;
$type4 = 4;
$type6 = 1;
有4个结果的event_type值为1等。
答案 0 :(得分:2)
这样做的方法是使用foreach
$result = [];
foreach($events as $key => $value) {
$result[$value['event_type']] = isset($result[$value['event_type']]) ? $result[$value['event_type']]+1 : 1;
}
// now you have indexed array $result with the desired output
http://sandbox.onlinephpfunctions.com/code/b49150f192b99b218708d5dd8037fe5a23457a79
答案 1 :(得分:1)
使用它可以工作:
$events = EventHistory::where('u_h_id', $id)
->where('has_read', 0)
->select('event_type', \DB::raw('count(*) as count'))
->groupBy('event_type')
->get();