Builder

Пагинация

Пагинация коллекций - это методы организации длинных списков или наборов данных на веб-страницах, который позволяет пользователям просматривать содержимое по частям. Вместо того, чтобы загружать все элементы одновременно, пагинация разбивает их на отдельные страницы с фиксированным количеством элементов на каждой странице.
Этот подход имеет несколько преимуществ. Во-первых, он ускоряет загрузку страницы и уменьшает нагрузку на сервер, поскольку только необходимые данные загружаются по мере необходимости. Во-вторых, он облегчает навигацию по длинным спискам, позволяя пользователям быстро перемещаться между страницами.
Кроме того, пагинация позволяет различным пользователям просматривать определенные страницы одновременно, что может быть полезно при работе с большими объемами данных. Например, это может быть удобно для разделения контента на страницы блога или списка товаров в интернет-магазине.
Класс CollectionPaginate наследует класс Collection и расширяет его функциональность

Настройки пагинатора

Некоторые параметры пагинатора можно переопределить
<?php

namespace App\Models;

use MotorORM\Builder;

class Model extends Builder
{
    // Переопределение имени страниц
    protected ?string $paginateName = 'page';

    // Переопределение базового шаблона со страницами
    protected ?string $paginateView = __DIR__ . '/../../resources/views/app/_paginator.php';
}

Получение текущей страницы (currentPage)

Метод currentPage() возвращает текущую страницу:
$pages = Model::query()->paginate(10);
$pages->currentPage();

// 1

Получение количества элементов (total)

Метод total() возвращает общее количество элементов:
$pages = Model::query()->paginate(10);
$pages->total();

// 12
Метод links() возвращает сформированный блок html со списком страниц:
$pages = Model::query()->paginate(10);
$pages->links();

/*
<nav>
    <ul class="pagination">
        <li class="page-item active"><span class="page-link">1</span></li>
        <li class="page-item"><a class="page-link" href="?page=2">2<a><li>
        <li class="page-item"><a class="page-link" href="?page=2">»<a><li>
    </ul>
</nav>
*/

Установка url страниц (withPath)

По умолчанию ссылки, сгенерированные пагинатором, будут соответствовать URI текущего запроса.
Однако метод пагинатора withPath() позволяет настроить URI, используемый пагинатором при создании ссылок.
$pages = Model::query()->paginate(10);

$pages->withPath('/admin/users');

// /admin/users?page=N

Установка параметров страниц (appends)

Вы можете добавить к ссылке на страницы дополнительные параметры, используя метод appends().
$pages = Model::query()->paginate(10);

$pages->appends(['sort' => 'votes']);

// /admin/users?page=N&sort=votes