我对两个运行良好的查询结果进行了合并:
$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);
Run Code Online (Sandbox Code Playgroud)
现在,我需要对这个新集合进行分页,并根据建议添加以下内容:
$page = 1;
$perPage = 60;
$pagination = new \Illuminate\Pagination\LengthAwarePaginator(
$events->forPage($page, $perPage),
$events->count(),
$perPage,
$page
);
Run Code Online (Sandbox Code Playgroud)
编辑:对于未来的读者,爱国者的答案很棒,而我做到了。
Roh*_*ami 11
分页集合的最佳方式:
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,
]
);
});
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
你调用links()和render()错误的对象。您已将分页器分配给了$pagination变量。你应该打电话
$pagination->links()
Run Code Online (Sandbox Code Playgroud)
要么
$pagination->render()
Run Code Online (Sandbox Code Playgroud)
另外,如果您希望对此进行一点整理,则可以修改查询,以便只执行一个查询,而无需合并两个不同的结果集。您只需要首先对日期比较的结果进行排序,然后对您的valid_to字段进行排序。
$events = \App\Event::orderByRaw('valid_to < ?', [$today])->orderBy('valid_to')->get();
Run Code Online (Sandbox Code Playgroud)
日期比较将返回正确/错误的结果。按照ASC顺序(未指定时为默认值),true结果将在false结果之后,因此valid_to小于$today(已过期)的行将在valid_to大于或等于的行之后$today。
然后,该结果集将由valid_to字段本身排序。这个查询为您提供的结果与您手动合并的两个查询相同。而且,当然,您可以对这一个查询进行分页:
$events = \App\Event::orderByRaw('valid_to < ?', [$today])->orderBy('valid_to')->paginate(60);
Run Code Online (Sandbox Code Playgroud)
现在,对您的$events对象进行了分页,因此您需要使用$events->links()和$events->render()。
| 归档时间: |
|
| 查看次数: |
3309 次 |
| 最近记录: |