Blog Detail

07

Jul
Easily Merge Multiple Paginate instances in laravel cover image

arrow_back Easily Merge Multiple Paginate instances in laravel

Laravel 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.

Installation

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.

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'));
    }
}

For more details, Please visit Github

Published at : 07-07-2022

Author : Rizwan Aslam
AUTHOR
Rizwan Aslam

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 your project

Launch project