publicoms / laravel-custom-paginator
Paginate based on last item, not pages.
Installs: 1 888
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^7.0|^8.0
- symfony/http-foundation: ~2.7|~3.0|~4.0|~5.0
- symfony/http-kernel: ~2.7|~3.0|~4.0|~5.0
Requires (Dev)
- phpunit/phpunit: ^6|^7|^8|^9
- squizlabs/php_codesniffer: ^3.5
This package is not auto-updated.
Last update: 2024-05-16 23:45:36 UTC
README
Paginate based on last item, not page.
Installation
composer require publicoms/laravel-custom-paginator
Add the following trait to your Models.
use \publicoms\ItemPaginator\ItemPaginatorTrait;
Add the following provider to config/app.php
\publicoms\ItemPaginator\ItemPaginatorServiceProvider::class,
Usage
This package is based off simplePaginate and will take the same parameters.
$users = new User(); $paginated = $users->itemPaginate(); dd($paginated);
The last parameter is the field that will be used to paginate by, defaults to id
.
itemPaginate($perPage = null, $columns = ['*'], $pageName = 'from', $from = 0, $field = null)
ORDER BY DESC
If you want to decend your sorting you'll want to use itemPaginateDesc
instead of itemPaginate
. The first page will add an extra query to find the last item.
Example Output
array:6 [ "limit" => 2 "next_page_url" => "http://localhost?from=190" "from" => 100 "to" => 190 "data" => array:2 [ 0 => array:8 [ "id" => 100 "name" => "test" "email" => "test@test.com" "password" => "test" "remember_token" => null "created_at" => "2016-08-02 18:13:19" "updated_at" => "2016-08-02 18:13:19" "deleted_at" => null ] 1 => array:8 [ "id" => 190 "name" => "test2" "email" => "test2@test.com" "password" => "test" "remember_token" => null "created_at" => "2016-08-02 18:13:19" "updated_at" => "2016-08-02 18:13:19" "deleted_at" => null ] ] ]
Disclaimer
Will only sort by incremental ids.
I've only tested this with sqlite
and mysql
(see tests) so it may not work in every situation. Please report any you find.