如何在Laravel中的get()之后对集合进行分页?

时间:2017-04-18 17:29:02

标签: laravel paginate

我对两个查询结果进行了合并,效果很好:

$events1 = \App\Event::Where('valid_to','>=',$today)->orderByRaw('valid_to','ASC')->get();
$events2 = \App\Event::Where('valid_to','<',$today)>orderByRaw('valid_to','ASC')->get();
$events = $events1->merge($events2); 

现在我需要对这个新系列进行分页,并且建议我添加这个部分:

$page = 1;
$perPage = 60;
$pagination = new \Illuminate\Pagination\LengthAwarePaginator(
    $events->forPage($page, $perPage), 
    $events->count(), 
    $perPage, 
    $page
);
编辑:对于未来的读者来说,帕特丽克斯的答案很有效,我做到了。

2 个答案:

答案 0 :(得分:4)

您在错误的对象上调用$(pop).on('shown.bs.popover', function(e) { if ($('#panel2Head').html()== 'XXX') { var id = $(e.target).attr('aria-describedby'); $('#'+id).html('<p><b>My New Popover Content</b></p>'); } }); links()。您已将分页器分配给render()变量。你应该打电话

$pagination

$pagination->links()

此外,如果您想稍微清理一下,可以修改查询,这样您只需要一个查询,而不需要组合两个不同的结果集。您只需先对日期比较结果进行排序,然后在$pagination->render() 字段中进行排序。

valid_to

日期比较将返回真/假结果。在ASC顺序中(默认情况下未指定),$events = \App\Event::orderByRaw('valid_to < ?', [$today])->orderBy('valid_to')->get(); 结果将在true结果后出现,因此false小于valid_to(过期)的行将在$today大于或等于valid_to的行。

然后,$today字段本身将对该结果集进行排序。这一个查询会为您提供与您手动合并的两个查询相同的结果。当然,您可以只对这一个查询进行分页:

valid_to

现在,您的$events = \App\Event::orderByRaw('valid_to < ?', [$today])->orderBy('valid_to')->paginate(60); 对象是分页的,因此您需要使用$events$events->links()

答案 1 :(得分:1)

分页收集的最佳方法:

1-将其添加到\ app \ Providers \ AppServiceProvider的启动功能

  /**
         * Paginate a standard Laravel Collection.
         *
         * @param int $perPage
         * @param int $total
         * @param int $page
         * @param string $pageName
         * @return array
         */
        Collection::macro('paginate', function($perPage, $total = null, $page = null, $pageName = 'page') {
            $page = $page ?: LengthAwarePaginator::resolveCurrentPage($pageName);
            return new LengthAwarePaginator(
                $this->forPage($page, $perPage),
                $total ?: $this->count(),
                $perPage,
                $page,
                [
                    'path' => LengthAwarePaginator::resolveCurrentPath(),
                    'pageName' => $pageName,
                ]
            );
        });

2-从此以后,您可以像这样对所有收藏进行分页

$events1 = \App\Event::Where('valid_to','>=',$today)->orderByRaw('valid_to','ASC')->get();
$events2 = \App\Event::Where('valid_to','<',$today)>orderByRaw('valid_to','ASC')->get();
$events = $events1->merge($events2); 

$events->paginate(5)