Laravel根据特定值计算结果

时间:2017-08-02 17:40:22

标签: php laravel eloquent

我有一个简单的查询:

$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等。

2 个答案:

答案 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();