Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Чим paginate() відрізняється від simplePaginate() і коли обирати простий варіант?

paginate() робить два запити:

select count(*) as aggregate from posts where published = true;   -- загальна кількість
select * from posts where published = true order by id desc limit 15 offset 30;

Завдяки кількості він знає, скільки всього сторінок, і може показати навігацію «1 2 3 ... 48» та «Показано 31-45 з 712».

simplePaginate() робить один запит і бере на один запис більше:

select * from posts where published = true order by id desc limit 16 offset 30;

Якщо повернувся 16-й запис - наступна сторінка існує. Загальної кількості він не знає, тому показує лише «Попередня» і «Наступна».

$posts = Post::where('published', true)->latest('id')->simplePaginate(15);

Порівняння:

paginate() simplePaginate()
запитів 2 (з count) 1
номери сторінок так ні
загальна кількість $posts->total() недоступна
$posts->lastPage() так ні
швидкість на великих таблицях count(*) може бути дорогим швидше

Коли обирати simplePaginate():

  • стрічки й списки, де користувач гортає послідовно: новини, коментарі, історія дій;
  • кнопка «Завантажити ще»;
  • великі таблиці, де count(*) зі складними умовами займає помітний час;
  • API для мобільних застосунків, яким номери сторінок не потрібні.

Коли paginate(): таблиці в адмінці, результати пошуку з переходом на конкретну сторінку, місця, де потрібно показати загальну кількість.

Третій варіант - cursorPaginate(): теж без загальної кількості, але замість offset використовує умову за ключем сортування - швидкий навіть на далеких сторінках. Але не дозволяє перейти на довільну сторінку.

Відображення однакове: {{ $posts->links() }} для обох; для простої пагінації Laravel використовує окремий шаблон лише з двома кнопками.

Докладніше в документації: Проста пагінація

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання