Laravel Eloquent несколько подсчетов с различными условиями в одном запросе - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть код как показано ниже:

$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();

Как я могу написать это в одном запросе?

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

Вам придется использовать фасад DB вместо модели. Выберите поле id, затем count, group by id и получите. Я не могу проверить в это время!

0 голосов
/ 03 сентября 2018

Вот решение, которое я нашел, но ответ @ 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();
0 голосов
/ 03 сентября 2018

Используйте 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...