Laravel pagination not working with group by clause

前端 未结 5 481
北荒
北荒 2020-12-19 04:36

It seems Laravel pagination deos not working properly with group by clause. For example:

            $users = Subject::select(DB::raw(\'subjects.*, count(user_sub         


        
5条回答
  •  没有蜡笔的小新
    2020-12-19 05:40

    I know it is an old question, by I am sharing my solution for future reference.

    I managed to write a function based on this link which does the heavy job of determining the pagination of a complex query. Just pass the 'QueryBuilder' and it will return the paginated object/collection.

    Additionally, this procedure can track and maintain the other parameters except for page=.

    public function mergeQueryPaginate(\Illuminate\Database\Eloquent\Builder $query): \Illuminate\Pagination\LengthAwarePaginator
        {
            $raw_query = $query;
            $totalCount = $raw_query->get()->count();
    
            $page = request('page', 1);
            $skip = $perPage * ($page - 1);
            $raw_query = $raw_query->take($perPage)->skip($skip);
    
            $parameters = request()->getQueryString();
            $parameters = preg_replace('/&page(=[^&]*)?|^page(=[^&]*)?&?/', '', $parameters);
            $path = url(request()->getPathInfo() . '?' . $parameters);
    
            $rows = $raw_query->get();
    
            $paginator = new LengthAwarePaginator($rows, $totalCount, $perPage, $page);
            $paginator = $paginator->withPath($path);
            return $paginator;
        }
    

提交回复
热议问题