Метод GROUP BY в построителе запросов Laravel вместе с методами SKIP и TAKE - PullRequest
0 голосов
/ 25 января 2019

У меня около 50000 записей, и я показываю их в Datatable с обработкой на стороне сервера.В своем запросе я применяю метод groupBy() с помощью метода skip() и take().

Я хочу иметь возможность применить ограничение ПОСЛЕ groupBy() например

Если предел равен 10, он должен вернуть 10 групп, а не 10 записей.

DB::table('actions')->whereBetween('timestamp', 
array($dates['startDate'], $dates['endDate']))
->where('shop_name', $shopName)
->skip($start)
->take(10)
->get()
->groupBy('product_id');

По этому запросу я получаю 10 записей, а не 10 групп.

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Порядок ваших операторов запроса неправильный. Следующее должно сделать свое дело. Обратите внимание, что groupBy() перед вашими take() и get().

В вашем случае вы группируете после того, как записи были получены.

DB::table('actions')
    ->whereBetween('timestamp', array($dates['startDate'], $dates['endDate']))
    ->where('shop_name', $shopName)
    ->groupBy('product_id')
    ->skip($start)
    ->take(10)
    ->get()
0 голосов
/ 25 января 2019
DB::table('actions')
            ->whereBetween('timestamp', array($dates['startDate'], $dates['endDate']))
            ->where('shop_name', $shopName)
            ->get()
            ->groupBy('product_id')
            ->splice($start,$rowperpage);

и этот порядок сработал.

0 голосов
/ 25 января 2019

Попробуйте пропустить take(10) и добавить limit(10) в самом конце вашего запроса, но перед get().

...