Laravel Pagination: Сохранение параметров запроса на второй странице

Источник: «Laravel Pagination: Keep Query Parameters on Second Page»
Одна из типичных проблем с пагинацией возникает, если у вас на странице есть несколько фильтров с GET-параметрами. Как сделать так, чтобы они не исчезали, когда пользователь переходит на страницу /?page=2?

Проблема: Разъяснение

Типичный список ссылок пагинации строится из Контроллера следующим образом:

$users = User::paginate();

Если URL вашей страницы — /users, то директива Blade {{ $users->links() }} формирует URL как:

Но что, если ваш URL имеет вид /users?role=admin?

Ссылки пагинации останутся прежними, а значит, вторая страница потеряет ролевой фильтр. Что делать?

Решение: Добавление или Строка запроса

Вы можете сделать две вещи, чтобы сохранить параметры GET на следующих страницах.

  1. Сохраните все параметры: withQueryString()

    Просто подключите ещё один метод в конце:

    $users = User::paginate()->withQueryString();
  2. Сохраняйте только определённые параметры: appends()

    Если вам важны только определённые параметры, укажите их со значениями:

    $users = User::paginate()->appends([
    'role' => $request->role,
    'group' => $request->group,
    ]);

Тогда результирующие ссылки для всех остальных страниц будут иметь вид:

Подробнее о пагинации Laravel можно прочитать в официальной документации.

Дополнительные материалы

Предыдущая Статья

Больше контроля над выбором :nth-child() с синтаксисом of S

Следующая Статья

Руководство по использованию ts-reset для TypeScript