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

$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
);

编辑:对于 future 的读者,帕特里克斯的回答很好,我做到了。

最佳答案

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

$pagination->links()

或者
$pagination->render()

此外,如果您想稍微清理一下,您可以修改您的查询,以便您只有一个查询并且不需要组合两个不同的结果集。您只需要先对日期比较的结果进行排序,然后在 valid_to 字段上进行排序。
$events = \App\Event::orderByRaw('valid_to < ?', [$today])->orderBy('valid_to')->get();

日期比较将返回真/假结果。在 ASC 顺序中(未指定时默认),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()$events->render()

关于laravel - 在Laravel中,如何在get()之后对集合进行分页?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43478670/

10-17 02:55