Mysql Laravel在一个查询中具有不同条件的雄辩多重计数

Mysql Laravel在一个查询中具有不同条件的雄辩多重计数,mysql,laravel,eloquent,Mysql,Laravel,Eloquent,我有如下代码: $sendto_hikkou1 = Guest::where('mypage_id', $mypage) ->where('snd_to_hikkou_id', 1)->count(); $sendto_hikkou2 = Guest::where('mypage_id', $mypage) ->where('snd_to_hikkou_id', 2)->count(); $sendto_hi

我有如下代码:

$sendto_hikkou1 = Guest::where('mypage_id', $mypage)
                ->where('snd_to_hikkou_id', 1)->count();
$sendto_hikkou2 = Guest::where('mypage_id', $mypage)
                ->where('snd_to_hikkou_id', 2)->count();
$sendto_hikkou3 = Guest::where('mypage_id', $mypage)
                ->where('snd_to_hikkou_id', 3)->count();

如何在一个查询中写入此内容

使用
groupBy
在一个查询中获取所有计数,如下所示

$sendto_hikkou = Guest::where('mypage_id', $mypage)
    ->whereIn('snd_to_hikkou_id',[1,2,3])
    ->groupBy('snd_to_hikkou_id')
    ->select('snd_to_hikkou_id',DB::raw("count(*) as hikkou_count"))
    ->get();

您必须使用DB facade而不是模型。 选择id字段,然后计数,按id分组,然后获取。
我现在不能测试

这里是我找到的解决方案,但是@C2486的答案要好得多

        $sendto_hikkou = Guest::where('mypage_id', $mypage)
        ->select(
          \DB::raw('COUNT(IF( snd_to_hikkou_id = 1, snd_to_hikkou_id, NULL)) AS item1'),
          \DB::raw('COUNT(IF( snd_to_hikkou_id = 2, snd_to_hikkou_id, NULL)) AS item2'),
          \DB::raw('COUNT(IF( snd_to_hikkou_id = 3, snd_to_hikkou_id, NULL)) AS item3'),
        )
       ->get();

谢谢,我刚刚找到了解决办法!而且它使用了DB facade ^^太好了,我刚刚找到了解决方案,但是你的代码要好得多!Tks。但是我还有一个问题,snd_to_hikkou_id=1->没有结果,所以它不会返回总数=0;我能解决这个问题吗?请分享你已经找到的解决方案,我们在这里学习。哦,对不起,我现在就分享