РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
907 of 1392 menu

Класс CursorPaginator

Класс CursorPaginator применяется для пагинации записей с использованием курсоров вместо номеров страниц. Этот подход особенно эффективен для больших наборов данных, так как не требует подсчёта общего количества записей и не страдает от проблем с пропуском страниц, характерных для традиционной пагинации. Первым параметром в конструктор передаётся коллекция элементов, вторым - экземпляр курсора, третьим - количество элементов на странице, четвёртым - массив опций.

Синтаксис

<?php use Illuminate\Pagination\CursorPaginator; use Illuminate\Pagination\Cursor; $paginator = new CursorPaginator($items, $cursor, $perPage, $options); ?>

Для создания экземпляра класса используется метод cursorPaginate, доступный в построителе запросов и Eloquent.

Пример

Получим список статей с использованием курсорной пагинации с шагом в 10 записей на страницу:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Http\Request; class ArticleController extends Controller { public function index() { $articles = Article::cursorPaginate(10); return view('articles.index', ['articles' => $articles]); } } ?>

Результат выполнения кода в представлении:

@foreach ($articles as $article) <div> {{ $article->title }} </div> @endforeach {{ $articles->links() }}

Пример

Используем курсорную пагинацию с дополнительными условиями фильтрации. Отфильтруем статьи по статусу и отсортируем по дате создания:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Http\Request; class ArticleController extends Controller { public function index() { $articles = Article::where('status', 'published') ->orderBy('created_at', 'desc') ->cursorPaginate(15); return view('articles.index', ['articles' => $articles]); } } ?>

Пример

Покажем, как получить информацию о текущем и следующем курсорах для навигации. Доступ к курсорам осуществляется через методы nextCursor и previousCursor:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Http\Request; class ArticleController extends Controller { public function index(Request $request) { $articles = Article::cursorPaginate(10); $nextCursor = $articles->nextCursor(); $previousCursor = $articles->previousCursor(); $res = [ 'next_cursor' => $nextCursor ? $nextCursor->encode() : null, 'previous_cursor' => $previousCursor ? $previousCursor->encode() : null, 'has_more_pages' => $articles->hasMorePages(), 'on_first_page' => $articles->onFirstPage() ]; return response()->json($res); } } ?>

Результат выполнения кода:

{ "next_cursor": "eyJpZCI6MTB9", "previous_cursor": null, "has_more_pages": true, "on_first_page": true }

Пример

Используем курсорную пагинацию с кастомными параметрами в URL. Метод withQueryString сохраняет все параметры запроса при генерации ссылок навигации:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Http\Request; class ArticleController extends Controller { public function index(Request $request) { $articles = Article::where('category', $request->category) ->orderBy('id') ->cursorPaginate(20) ->withQueryString(); return view('articles.index', ['articles' => $articles]); } } ?>

Смотрите также

  • метод cursorPaginate,
    который создаёт курсорный пагинатор для запроса
  • метод paginate,
    который создаёт стандартный пагинатор с номерами страниц
  • метод simplePaginate,
    который создаёт простой пагинатор без общего количества записей
  • метод nextCursor,
    который возвращает курсор для следующей страницы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить