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.1(3w ago)7642.9k↓54.8%2[2 issues](https://github.com/lampager/lampager-laravel/issues)MITPHPPHP ^8.2CI passing

Since Oct 20Pushed 3w 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 4d ago

READMEChangelog (10)Dependencies (16)Versions (24)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 || ^13.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

61

—

FairBetter than 98% of packages

Maintenance95

Actively maintained with recent releases

Popularity40

Moderate usage in the ecosystem

Community15

Small or concentrated contributor base

Maturity75

Established project with proven stability

 Bus Factor1

Top contributor holds 95.6% 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 ~150 days

Recently: every ~416 days

Total

22

Last Release

22d 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 (65 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

[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M346](/packages/psalm-plugin-laravel)[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M203](/packages/laravel-ai)[api-platform/laravel

API Platform support for Laravel

58171.8k14](/packages/api-platform-laravel)[simplestats-io/laravel-client

Server-side analytics for Laravel that follows the full funnel from visit to registration to payment, attributed to the channel that drove it. Revenue, MRR, churn and ad-spend profit (ROAS/CAC) per channel. GDPR compliant, ad-blocker proof.

5022.0k](/packages/simplestats-io-laravel-client)[tomshaw/electricgrid

A feature-rich Livewire package designed for projects that require dynamic, interactive data tables.

119.4k](/packages/tomshaw-electricgrid)

PHPackages © 2026

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