【发布时间】:2017-05-24 12:31:00
【问题描述】:
我使用的是 Laravel 框架版本 5.1.45 (LTS)。
一个俱乐部可以举办许多活动。我正在尝试列出所有事件,按年份对它们进行分组并每年显示一页。
根据我的 Laravel 版本文档“目前,Laravel 无法高效执行使用 groupBy 语句的分页操作。如果需要使用带有分页结果集的 groupBy,建议您查询数据库并创建一个手动分页器。”
这是我手动创建分页器的尝试,它似乎可以完成这项工作:
public function index()
{
$page = Paginator::resolveCurrentPage() - 1;
$perPage = 1;
$events = new Paginator(Event::orderBy('date', 'desc')->groupBy(DB::raw('YEAR(date)'))->skip(($page - 1) * $perPage)->take($perPage + 1)->get(), $perPage, $page);
$events->setPath(['events/events']);
return view('events.index', ['events' => $events]);
}
这是我尝试在页面底部显示链接的方式。
{!! $events->render() !!}
如果我删除渲染位,页面会显示,尽管没有链接。我什至可以转到下一页(2016 年),在浏览器的网址末尾手动添加 ?page=2。
但是如果我将渲染位留在索引页面中,我会在 AbstractPaginator.php 第 130 行得到 ErrorException:数组到字符串的转换。
我做错了什么?
【问题讨论】:
-
我认为
$events->setPath(['events/events']);有问题。尝试将其更改为$events->setPath('events/events'); -
谢谢你,成功了。然而,第 2 页到下一页的链接是
?page=2,它当然会重新加载同一页面。我猜是时候问另一个问题了:(
标签: php pagination laravel-5.1