PHPackages                             lampager/lampager - 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

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

lampager/lampager
=================

Rapid pagination without using OFFSET

v0.5.0(1y ago)3778.3k↓44.4%[1 issues](https://github.com/lampager/lampager/issues)5MITPHPPHP ^8.2CI passing

Since Oct 18Pushed 4mo ago6 watchersCompare

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

READMEChangelog (3)Dependencies (2)Versions (12)Used By (5)

[![lampager](https://user-images.githubusercontent.com/1351893/31754281-a36010cc-b4d1-11e7-8371-851f5faa3785.png)](https://user-images.githubusercontent.com/1351893/31754281-a36010cc-b4d1-11e7-8371-851f5faa3785.png)

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

Lampager Core
=============

[](#lampager-core)

The core package of Lampager

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

[](#requirements)

- PHP: `^8.2`

Note

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

Installing
----------

[](#installing)

```
composer require lampager/lampager
```

Usage
-----

[](#usage)

Basically you don't need to directly use this package. For example, if you use Laravel, install [lampager/lampager-laravel](https://github.com/lampager/lampager-laravel).

However, you can manually use like this:

```
use Lampager\Paginator;
use Lampager\ArrayProcessor;

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

$query = (new Paginator())
    ->forward()
    ->limit(5)
    ->orderByDesc('updated_at') // ORDER BY `updated_at` DESC, `created_at` DESC, `id` DESC
    ->orderByDesc('created_at')
    ->orderByDesc('id')
    ->seekable()
    ->configure($cursor);

$rows = run_your_query_using_PDO($query); // Note: SQLite3 driver example is bundled in the tests/StubPaginator.php. Please refer to that.

$result = (new ArrayProcessor())->process($query, $rows);
```

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`
