07
JulLaravel pagination merge is an amazing 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 on 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.
For Laravel 5.5+
Require this package with composer:
composer require aneeskhan47/laravel-pagination-merge
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,
]
The service provider will be auto-discovered. You do not need to add the provider anywhere.
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'));
}
}
For more details, Please visit Github
Published at : 07-07-2022
I am a highly results-driven professional with 12+ years of collective experience in the grounds of web application development especially in laravel, native android application development in java, and desktop application development in the dot net framework. Now managing a team of expert developers at Codebrisk.
Launch project