Laravel Multiple Pagination in one page

后端 未结 10 1735
独厮守ぢ
独厮守ぢ 2020-11-27 16:15

I\'m having some trouble with my pagination. I\'m having two tables with data from a database and I paginated it with laravel Paginator.

Now my problem is when you g

10条回答
  •  离开以前
    2020-11-27 17:19

    Unfortunately I can't test this code right now, but browsing at the docs and the code (in Illuminate/Pagination/Environment) I guess you could something like this:

    # use default 'page' for this
    $collection1 = Model::paginate(20);
    
    # use custom 'other_page' for this
    $collection2 = Model2::paginate(20);
    $collection2->setPageName('other_page');
    

    The setPageName() method isn't documented in the docs, but it's a public method alongside those indicated in the documentation, so it should be working fine. FOr reference, this is the declaration (l. 171-180 in vendor/laravel/framework/src/Illuminate/Pagination/Environment.php):

    /**
     * Set the input page parameter name used by the paginator.
     *
     * @param  string  $pageName
     * @return void
     */
    public function setPageName($pageName)
    {
        $this->pageName = $pageName;
    }
    

    Now take into consideration that you will have another query string appended to the url, so you need to tell the pagination to consider it. Use the appends() method:

    $collection1->appends(array_except(Request::query(), 'page'))->links();
    
    $collection2->appends(array_except(Request::query(), 'other_page'))->links();
    

    That is, tell each Presenter to build up the url with all the query strings (the array resulting from Request::query() without the current index used by the paginator, or you'll end up with a double value). array_except() is a Laravel built in array helper that returns the given array (1st parameter) purged of the passed index (2nd parameter).

    I'll try to test this code as soon as I can, but it should work. Let me know in any case!

提交回复
热议问题