Опубликовано:
Laravel Pagination: Сохранение параметров запроса на второй странице
Одна из типичных проблем с пагинацией возникает, если у вас на странице есть несколько фильтров с GET-параметрами. Как сделать так, чтобы они не исчезали, когда пользователь переходит на страницу
/?page=2?
Проблема: Разъяснение
Типичный список ссылок пагинации строится из Контроллера следующим образом:
$users = User::paginate();
Если URL вашей страницы — /users
, то директива Blade {{ $users->links() }}
формирует URL как:
/users?page=2
/users?page=3
- и так далее
Но что, если ваш URL имеет вид /users?role=admin
?
Ссылки пагинации останутся прежними, а значит, вторая страница потеряет ролевой фильтр. Что делать?
Решение: Добавление или Строка запроса
Вы можете сделать две вещи, чтобы сохранить параметры GET на следующих страницах.
Сохраните все параметры:
withQueryString()
Просто подключите ещё один метод в конце:
$users = User::paginate()->withQueryString();
Сохраняйте только определённые параметры:
appends()
Если вам важны только определённые параметры, укажите их со значениями:
$users = User::paginate()->appends([
'role' => $request->role,
'group' => $request->group,
]);
Тогда результирующие ссылки для всех остальных страниц будут иметь вид:
/users?role=admin&group=1&page=2
/users?role=admin&group=1&page=3
- и так далее
Подробнее о пагинации Laravel можно прочитать в официальной документации.