Introduction
The Laravel documentation is great most of the time, but when you are stuck on a particular problem you have to figure by yourself what is the solution. Recently I had to create manually a paginator instance using the LengthAwarePaginator
class. The first attempt was nearly a success, here a snippet of my controller:
<?php
$page = $request->has('page') ? $request->get('page') : 1;
$data = $this->userRepository->paginate($request->all(), $page);
$users = new LengthAwarePaginator($data->items, $data->totalItems, 15, $page);
Pretty straightforward! The LengthAwarePaginator
class constructor accepts the items, the total number of items, the items per page and the current page. In the browser however I immediately noticed that, when switching from the first page to the second, all the query parameters got lost.
How do I solve this problem? By looking up into the Laravel API of course.
Turns out that the constructor of LengthAwarePaginator
accepts an optional array as a fifth parameter formed by the following entries path, query, fragment, pageName
.
So I needed to edit the code as the following:
<?php
$users = new LengthAwarePaginator($data->items, $data->totalItems, 15, $page, [
'path' => $request->url(),
'query' => $request->query(),
]);