In a vanilla Laravel application the query builder paginators will listen to page
request parameter. This works great, but it does not comply with the json:api spec. That spec expects the query builder paginator to listen to the page[number]
and page[size]
request parameters.
This package adds a jsonPaginate
method to the Eloquent query builder that listens to those parameters and adds the pagination links the spec requires.
You're free to use this package (it's MIT-licensed), but if it makes it to your production environment we highly appreciate you sending us a postcard from your hometown, mentioning which of our package(s) you are using.
Our address is: Spatie, Samberstraat 69D, 2060 Antwerp, Belgium.
We publish all received postcards on our company website.
You can install the package via composer:
composer require spatie/laravel-json-api-paginate
Optionally you can publish the config file with:
php artisan vendor:publish --provider="Spatie\JsonApiPaginate\JsonApiPaginateServiceProvider" --tag="config"
This is the contents of the file that will be published in config/json-api-paginate.php
return [
/*
* The maximum number of results that will be returned
* when using the JSON API paginator.
*/
'max_results' => 30,
/*
* The key of the page[x] query string parameter for page number.
*/
'number_parameter' => 'number',
/*
* The key of the page[x] query string parameter for page size.
*/
'size_parameter' => 'size',
/*
* The name of the macro that is added to the Eloquent query builder.
*/
'method_name' => 'jsonPaginate',
];
To paginate the results accoring the the json API spec, simply call the jsonPaginate
method.
YourModel::jsonPaginate();
Of course you may still use all the builder methods you know and love:
YourModel::where('my_field', 'myValue')->jsonPaginate();
By default the maximum page size is set to 30. You can change this number in the config
file or just pass the a value to jsonPaginate
.
$maxResults = 60;
YourModel::jsonPaginate($maxResults);
Please see CHANGELOG for more information what has changed recently.
composer test
Please see CONTRIBUTING for details.
If you discover any security related issues, please email freek@spatie.be instead of using the issue tracker.
The base code of this page was published on this Laracasts forum thread by Joram van den Boezem
Spatie is a webdesign agency based in Antwerp, Belgium. You'll find an overview of all our open source projects on our website.
The MIT License (MIT). Please see License File for more information.