【问题标题】:Laravel 5.1 pagination groupby links renderingLaravel 5.1 分页 groupby 链接渲染
【发布时间】: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


【解决方案1】:

希望这个sn-p能帮到你

public function index(Request $request)
{
    $posts = Post::all()
        ->paginate($request->get('per_page', 25));

    $grouped_by_date = $posts->mapToGroups(function ($post) {
        return [$post->published_date => $post];
    });
    $posts_by_date = $posts->setCollection($grouped_by_date);

    return view('posts.index', compact('posts_by_date'));
}

基本上用分组集合重新定义集合。

【讨论】:

    猜你喜欢
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 2016-01-05
    • 1970-01-01
    • 2016-11-17
    • 2020-09-21
    • 1970-01-01
    相关资源
    最近更新 更多