aneeskhan47 / laravel-pagination-merge
Merge multiple laravel paginate instances
Fund package maintenance!
www.paypal.com/paypalme/aneeskhan47
Installs: 15 194
Dependents: 0
Suggesters: 0
Security: 0
Stars: 16
Watchers: 1
Forks: 2
Open Issues: 0
Requires
- php: ^7.2|^8.0|^8.1|^8.2
- illuminate/pagination: ~5|^6|^7|^8|^9|^10|^11.0
- illuminate/support: ~5|^6|^7|^8|^9|^10|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- orchestra/testbench: ^3.0|^4.0|^5.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- phpunit/phpunit: ^8.5|^9.0|^10.0
README
Pagination Merge for Laravel 5/6/7/8/9/10/11
A simple Laravel pagination merge package that allows you to merge multiple ->paginate()
instances.
Some Background
I had to deal with something like that in a project I was working on, where in one of the pages I had to display two types of publication paginated and sorted by the created_at field. In my case, it was a Post model and an Event Model (hereinafter referred to as publications).
The only difference is I didn't want to get all the publications from the database and then merge and sort the results, as you can imagine it would rise a performance issue if we have hundreds of publications.
So I figure out that it would be more convenient to paginate each model and only then, merge and sort them. that's why I built this package.
This package is heavily inspired by this stackoverflow answer
โก๏ธ Installation
For Laravel 5.5+
Require this package with composer:
composer require aneeskhan47/laravel-pagination-merge
The service provider will be auto-discovered. You do not need to add the provider anywhere.
For Laravel 5.0 to 5.4
Require this package with composer:
composer require aneeskhan47/laravel-pagination-merge
Find the providers
key in config/app.php
and register the PaginationMerge Service Provider.
'providers' => [ // ... Aneeskhan47\PaginationMerge\PaginationMergeServiceProvider::class, ]
Find the aliases
key in config/app.php
and register the PaginationMerge alias.
'aliases' => [ // ... 'PaginationMerge' => Aneeskhan47\PaginationMerge\Facades\PaginationMerge::class, ]
๐ Usage
use App\Models\Post; use App\Models\Event; use Aneeskhan47\PaginationMerge\Facades\PaginationMerge; class PublicationsController extends Controller { /** * Display a listing of the resource. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function index(Request $request) { $events = Event::latest()->paginate(5); $posts = Post::latest()->paginate(5); $publications = PaginationMerge::merge($events, $posts) ->sortByDesc('created_at') ->get(); // since get() will return \Illuminate\Pagination\LengthAwarePaginator // you can continue using paginator methods like these etc: $publications->withPath('/admin/users') ->appends(['sort' => 'votes']) ->withQueryString() ->fragment('users') ->setPageName('publications_page'); return view('publications.index', compact('publications')); } }
๐ฐ Support the development
Do you like this package? Support it by donating
- PayPal: Donate
๐งช Testing
composer test
๐ Changelog
Please see CHANGELOG for more information on what has changed recently.
๐ค Contributing
Please see CONTRIBUTING for details.
๐ Security
If you discover any security-related issues, please email kingkhan2388@gmail.com instead of using the issue tracker.
๐ Credits
๐ License
The MIT License (MIT). Please see License File for more information.
๐ง Laravel Package Boilerplate
This package was generated using the Laravel Package Boilerplate.