DEV Community

Cover image for Laravel 8.x Cursor Based Pagination Example
Suresh Ramani
Suresh Ramani

Posted on • Originally published at techvblogs.com

Laravel 8.x Cursor Based Pagination Example

Introduction

Hello Developer, In this blog, I will teach you the Laravel 8.x cursor-based pagination example. The Laravel team released 8.41 with cursor pagination, a new eloquent method to update models quietly, a new string method, and the latest changes in the 8.x branch:

Cursor pagination works by constructing "where" clauses that compare the ordered column values ​​in the query, providing the most efficient database performance available amongst all of Laravel's pagination methods. This method of pagination is particularly well-suited for large data sets and "infinite" scrolling user interfaces. Unlike offset-based pagination, which includes a page number in the query string of the URLs generated by the paginator, cursor-based pagination places a "cursor" string in the query string.

There is no pagination for the Laravel cursor. So solving those issues Laravel team released 8.41 with cursor pagination. See the below example of how we can create cursor pagination.
Example

$users = User::orderBy('id')->cursorPaginate(10);
Enter fullscreen mode Exit fullscreen mode

Given the above pagination call for ten records, here's an example of the response if we were to return this instance in a controller:

{
  "data": [
    {
      "id": 1,
      "name": "Nona Wilkinson",
      "email": "stephen68@example.com",
      "email_verified_at": "2021-05-12T23:21:19.000000Z",
      "created_at": "2021-05-12T23:21:19.000000Z",
      "updated_at": "2021-05-12T23:21:19.000000Z"
    },
    {
      "id": 2,
      "name": "Titus Feeney Sr.",
      "email": "oklein@example.com",
      "email_verified_at": "2021-05-12T23:21:19.000000Z",
      "created_at": "2021-05-12T23:21:19.000000Z",
      "updated_at": "2021-05-12T23:21:19.000000Z"
    },
    {...}
  ],
  "path": "http://127.0.0.1:8000/users",
  "per_page": 10,
  "next_page_url": "http://127.0.0.1:8000/users?cursor=eyJpZCI6MTAsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0",
  "prev_page_url": null
}
Enter fullscreen mode Exit fullscreen mode

Thank you for reading this blog.

Top comments (1)

Collapse
 
bdelespierre profile image
Benjamin Delespierre

That's rad!