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

如何在Laravel中的get()之后对集合进行分页?,laravel,pagination,Laravel,Pagination,我对两个查询结果进行了合并,效果很好: $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($ev

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

$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); 
编辑:对于未来的读者来说,patricus的答案非常有效,我做到了。

您在错误的对象上调用了
links()
render()
。您已将分页器分配给
$pagination
变量。你应该打电话来

$pagination->links()

另外,如果您想稍微清理一下,可以修改查询,使您只有一个查询,而不需要组合两个不同的结果集。您只需首先对日期比较结果进行排序,然后在
valid\u to
字段中进行排序

$events = \App\Event::orderByRaw('valid_to < ?', [$today])->orderBy('valid_to')->get();

现在,分页的是您的
$events
对象,因此您希望使用
$events->links()
$events->render()
分页集合的最佳方式:

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)
$events1=\App\Event::Where('valid_to','>=',$today)->orderByRaw('valid_to','ASC')->get();

$events2=\App\Event::Where('valid_to','感谢您的回复。我这样做了,只要$page=1它就可以工作,但当我将$page=2放入调试时,出现了一些错误,我得到了“正在尝试获取非对象的属性(视图:…”,此时我正在尝试查找导致问题的非对象。
$events = \App\Event::orderByRaw('valid_to < ?', [$today])->orderBy('valid_to')->paginate(60);
  /**
         * 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,
                ]
            );
        });
$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)