PHPackages                             lampager/lampager-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. lampager/lampager-laravel

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

lampager/lampager-laravel
=========================

Rapid pagination for Laravel

v0.6.0(1y ago)7641.4k↓43.5%2[2 issues](https://github.com/lampager/lampager-laravel/issues)MITPHPPHP ^8.2CI passing

Since Oct 20Pushed 4mo ago8 watchersCompare

[ Source](https://github.com/lampager/lampager-laravel)[ Packagist](https://packagist.org/packages/lampager/lampager-laravel)[ RSS](/packages/lampager-lampager-laravel/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (8)Versions (23)Used By (0)

[![lampager-laravel](https://user-images.githubusercontent.com/1351893/31755018-9ab0c8ae-b4d6-11e7-9310-dbc372998ee4.png)](https://user-images.githubusercontent.com/1351893/31755018-9ab0c8ae-b4d6-11e7-9310-dbc372998ee4.png)

[![Build Status](https://github.com/lampager/lampager-laravel/actions/workflows/test.yml/badge.svg?branch=master)](https://github.com/lampager/lampager-laravel/actions)[![Coverage Status](https://camo.githubusercontent.com/d95966ab6f81606a2eacae1a25ca43bb582b467800e516eedb13d9e05807999d/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c616d70616765722f6c616d70616765722d6c61726176656c2f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/lampager/lampager-laravel?branch=master)

Lampager for Laravel
====================

[](#lampager-for-laravel)

Rapid pagination without using OFFSET

Caution

**Now Laravel officialy supports Cursor Pagination as of v8.41. Please don't use if you install such versions unless you choose `SQLServer` as RDBMS.**

- **[Highly Performant Cursor Pagination in Laravel 8.41 | Laravel News](https://laravel-news.com/cursor-pagination)**
- **[SQL Feature Comparison](https://www.sql-workbench.eu/dbms_comparison.html)** (See "Tuple Comparison" section)

Requirements
------------

[](#requirements)

Note

Older versions have outdated dependency requirements. If you cannot prepare the latest environment, please refer to past releases.

- PHP: `^8.2`
- Laravel: `^11.0 || ^12.0`
- [lampager/lampager](https://github.com/lampager/lampager): `^0.5`

Installing
----------

[](#installing)

```
composer require lampager/lampager-laravel
```

Basic Usage
-----------

[](#basic-usage)

Register service provider.

`config/app.php`:

```
        /*
         * Package Service Providers...
         */
        Lampager\Laravel\MacroServiceProvider::class,
```

Then you can chain `->lampager()` method from Query Builder, Eloquent Builder and Relation.

```
$cursor = [
    'id' => 3,
    'created_at' => '2017-01-10 00:00:00',
    'updated_at' => '2017-01-20 00:00:00',
];

$result = App\Post::whereUserId(1)
    ->lampager()
    ->forward()
    ->limit(5)
    ->orderByDesc('updated_at') // ORDER BY `updated_at` DESC, `created_at` DESC, `id` DESC
    ->orderByDesc('created_at')
    ->orderByDesc('id')
    ->seekable()
    ->paginate($cursor)
    ->toJson(JSON_PRETTY_PRINT);
```

It will run the optimized query.

```
(

    SELECT * FROM `posts`
    WHERE `user_id` = 1
    AND (
        `updated_at` = '2017-01-20 00:00:00' AND `created_at` = '2017-01-10 00:00:00' AND `id` > 3
        OR
        `updated_at` = '2017-01-20 00:00:00' AND `created_at` > '2017-01-10 00:00:00'
        OR
        `updated_at` > '2017-01-20 00:00:00'
    )
    ORDER BY `updated_at` ASC, `created_at` ASC, `id` ASC
    LIMIT 1

) UNION ALL (

    SELECT * FROM `posts`
    WHERE `user_id` = 1
    AND (
        `updated_at` = '2017-01-20 00:00:00' AND `created_at` = '2017-01-10 00:00:00' AND `id` orderByDesc('id')
    ->paginate();

return new PostResourceCollection($posts);
```

```
{
  "data": [/* ... */],
  "has_previous": false,
  "previous_cursor": null,
  "has_next": true,
  "next_cursor": {/* ... */}
}
```

Classes
-------

[](#classes)

Note: See also [lampager/lampager](https://github.com/lampager/lampager).

NameTypeParent ClassDescriptionLampager\\Laravel\\`Paginator`ClassLampager\\`Paginator`Fluent factory implementation for LaravelLampager\\Laravel\\`Processor`ClassLampager\\`AbstractProcessor`Processor implementation for LaravelLampager\\Laravel\\`PaginationResult`ClassLampager\\`PaginationResult`PaginationResult implementation for LaravelLampager\\Laravel\\`MacroServiceProvider`ClassIlluminate\\Support\\`ServiceProvider`Enable macros chainable from QueryBuilder, ElqouentBuilder and RelationLampager\\Laravel\\`LampagerResourceTrait`TraitSupport for Laravel JsonResourceLampager\\Laravel\\`LampagerResourceCollectionTrait`TraitSupport for Laravel ResourceCollection`Paginator`, `Processor` and `PaginationResult` are macroable.

API
---

[](#api)

Note: See also [lampager/lampager](https://github.com/lampager/lampager).

### Paginator::\_\_construct()
Paginator::create()

[](#paginator__constructpaginatorcreate)

Create a new paginator instance.
If you use Laravel macros, however, you don't need to directly instantiate.

```
static Paginator create(QueryBuilder|EloquentBuilder|Relation $builder): static
Paginator::__construct(QueryBuilder|EloquentBuilder|Relation $builder)
```

- `QueryBuilder` means `\Illuminate\Database\Query\Builder`
- `EloquentBuilder` means `\Illuminate\Database\Eloquent\Builder`
- `Relation` means `\Illuminate\Database\Eloquent\Relation`

### Paginator::transform()

[](#paginatortransform)

Transform Lampager Query into Illuminate builder.

```
Paginator::transform(Query $query): QueryBuilder|EloquentBuilder|Relation
```

### Paginator::build()

[](#paginatorbuild)

Perform configure + transform.

```
Paginator::build(\Lampager\Contracts\Cursor|array $cursor = []): QueryBuilder|EloquentBuilder|Relation
```

### Paginator::paginate()

[](#paginatorpaginate)

Perform configure + transform + process.

```
Paginator::paginate(\Lampager\Contracts\Cursor|array $cursor = []): \Lampager\Laravel\PaginationResult
```

#### Arguments

[](#arguments)

- **`(mixed)`** ***$cursor***
     An associative array that contains `$column => $value` or an object that implements `\Lampager\Contracts\Cursor`. It must be **all-or-nothing**.
    - For initial page, omit this parameter or pass empty array.
    - For subsequent pages, pass all parameters. Partial parameters are not allowd.

#### Return Value

[](#return-value)

e.g.

(Default format when using `\Illuminate\Database\Eloquent\Builder`)

```
object(Lampager\Laravel\PaginationResult)#1 (5) {
  ["records"]=>
  object(Illuminate\Database\Eloquent\Collection)#2 (1) {
    ["items":protected]=>
    array(5) {
      [0]=>
      object(App\Post)#2 (26) { ... }
      [1]=>
      object(App\Post)#3 (26) { ... }
      [2]=>
      object(App\Post)#4 (26) { ... }
      [3]=>
      object(App\Post)#5 (26) { ... }
      [4]=>
      object(App\Post)#6 (26) { ... }
    }
  }
  ["hasPrevious"]=>
  bool(false)
  ["previousCursor"]=>
  NULL
  ["hasNext"]=>
  bool(true)
  ["nextCursor"]=>
  array(2) {
    ["updated_at"]=>
    string(19) "2017-01-18 00:00:00"
    ["created_at"]=>
    string(19) "2017-01-14 00:00:00"
    ["id"]=>
    int(6)
  }
}
```

### Paginator::useFormatter()
Paginator::restoreFormatter()
Paginator::process()

[](#paginatoruseformatterpaginatorrestoreformatterpaginatorprocess)

Invoke Processor methods.

```
Paginator::useFormatter(Formatter|callable $formatter): $this
Paginator::restoreFormatter(): $this
Paginator::process(\Lampager\Query $query, \Illuminate\Support\Collection|\Illuminate\Database\Eloquent\Collection $rows): \Lampager\Laravel\PaginationResult
```

### PaginationResult::toArray()
PaginationResult::jsonSerialize()

[](#paginationresulttoarraypaginationresultjsonserialize)

Convert the object into array.

**IMPORTANT: `camelCase` properties are converted into `snake_case` form.**

```
PaginationResult::toArray(): array
PaginationResult::jsonSerialize(): array
```

### PaginationResult::\_\_call()

[](#paginationresult__call)

Call macro or Collection methods.

```
PaginationResult::__call(string $name, array $args): mixed
```

e.g.

```
PaginationResult::macro('foo', function () {
    return ...;
});
$foo = $result->foo();
```

```
$first = $result->first();
```

###  Health Score

52

—

FairBetter than 96% of packages

Maintenance62

Regular maintenance activity

Popularity40

Moderate usage in the ecosystem

Community15

Small or concentrated contributor base

Maturity75

Established project with proven stability

 Bus Factor1

Top contributor holds 95.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~136 days

Recently: every ~346 days

Total

21

Last Release

402d ago

PHP version history (6 changes)v0.1.0PHP ^5.6 || ^7.0

v0.4.0PHP ^7.1

v0.4.6PHP ^7.1 || ^8.0

v0.5.0PHP ^7.3 || ^8.0

v0.5.2PHP ^8.0

v0.6.0PHP ^8.2

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1351893?v=4)[mpyw](/maintainers/mpyw)[@mpyw](https://github.com/mpyw)

---

Top Contributors

[![mpyw](https://avatars.githubusercontent.com/u/1351893?v=4)](https://github.com/mpyw "mpyw (64 commits)")[![chitoku-k](https://avatars.githubusercontent.com/u/6535425?v=4)](https://github.com/chitoku-k "chitoku-k (2 commits)")[![alquerci](https://avatars.githubusercontent.com/u/2987860?v=4)](https://github.com/alquerci "alquerci (1 commits)")

---

Tags

fastlaravelpaginationpaginatorphplaravelpaginatorpaginationilluminatelimitoffset

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/lampager-lampager-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/lampager-lampager-laravel/health.svg)](https://phpackages.com/packages/lampager-lampager-laravel)
```

###  Alternatives

[barryvdh/laravel-ide-helper

Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.

14.9k123.0M687](/packages/barryvdh-laravel-ide-helper)[spatie/laravel-enum

Laravel Enum support

3655.4M31](/packages/spatie-laravel-enum)[psalm/plugin-laravel

Psalm plugin for Laravel

3274.9M308](/packages/psalm-plugin-laravel)[spatie/laravel-livewire-wizard

Build wizards using Livewire

4061.0M4](/packages/spatie-laravel-livewire-wizard)[laracraft-tech/laravel-useful-additions

A collection of useful Laravel additions!

58109.4k](/packages/laracraft-tech-laravel-useful-additions)[lampager/lampager

Rapid pagination without using OFFSET

3778.3k5](/packages/lampager-lampager)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
