chelout / offset-pagination
Offset pagination made easy for Laravel
Installs: 4 956
Dependents: 1
Suggesters: 0
Security: 0
Stars: 4
Watchers: 4
Forks: 1
Open Issues: 2
Requires
- php: ^7.1.3
- illuminate/database: 5.8.*
- illuminate/http: 5.8.*
- illuminate/support: 5.8.*
Requires (Dev)
- orchestra/testbench-core: 3.8.*
- phpunit/phpunit: ^7.5|^8.0
This package is auto-updated.
Last update: 2024-10-29 05:34:19 UTC
README
This package provides an offset based pagination already integrated with Laravel's query builder and Eloquent ORM. It calculates the SQL query limits automatically by checking the requests GET parameters, and automatically builds the next and previous urls for you.
Installation
You can install this package via composer using:
composer require chelout/offset-pagination
The package will automatically register itself.
Config
To publish the config file to config/offset_pagination.php
run:
php artisan vendor:publish --provider="Chelout\OffsetPagination\CursorPaginationServiceProvider" --tag="config"
This will publish the following file. You can customize default items per page and maximum items per page.
Basic Usage
Paginating Query Builder Results
public function index() { $users = DB::table('users')->offsetPaginate(); return $users; }
Paginating Eloquent Results
$users = User::offsetPaginate(5);
Of course, you may call paginate after setting other constraints on the query, such as where clauses:
$users = User::where('votes', '>', 100)->offsetPaginate(5);
Or sorting your results:
$users = User::orderBy('id', 'desc')->offsetPaginate(5);
Displaying Pagination Results
Converting to JSON
A basic return will transform the paginator to JSON and will have a result like this:
Route::get('api/v1/users', function () { return App\User::offsetPaginate(); });
Calling api/v1
will output:
{ "data": [ {}, ], "offset": 60, "offset": 60, "prev": 55, "next": 65, "limit": 5, "total": 100, "next_page_url": "https://example.com/api/v1/users?limit=5&offset=65", "prev_page_url": "https://example.com/api/v1/users?limit=5&offset=55" }
Using a Resource Collection
By default, Laravel's API Resources when using them as collections, they will output a paginator's metadata
into links
and meta
.
{ "data":[ {}, ], "links": { "first": "https://example.com/api/v1/users", "last": "https://example.com/api/v1/users?offset=95", "prev": "https://example.com/api/v1/users?offset=55", "next": "https://example.com/api/v1/users?offset=65" }, "meta": { "offset": 60, "prev": 55, "next": 65, "limit": 5, "total": 100 }, }
Testing
Run the tests with:
vendor/bin/phpunit
Credits
- Viacheslav Ostrovskiy
- All Contributors
License
The MIT License (MIT). Please see License File for more information.