【问题标题】:Laravel 4.x Paginate ArrayLaravel 4.x 分页数组
【发布时间】:2014-06-17 11:52:28
【问题描述】:

为了简单起见,我有一个数组 $matches,它在我的控制器中包含我的结果。通常,我会返回一个视图,并传递该数组。

return View::make('results', compact('matches'));

但是,我想在视图中对这些结果进行分页。

@foreach ($matches as $match)
   ...
@endforeach
// Paginate matches here!

似乎 Laravel 的内置分页不适用于数组。我找不到任何资源来告诉我如何做到这一点。任何帮助将不胜感激!

【问题讨论】:

    标签: arrays laravel laravel-4 pagination


    【解决方案1】:

    您可以手动创建分页器并使用数组:

    $paginator = Paginator::make($items, $totalItems, $perPage);
    

    查看文档:http://laravel.com/docs/pagination

    【讨论】:

    • 所以我发现你必须在将数组发送到 Paginator::make 之前自己对数组进行切片。这会正确返回正确数量的结果。但是,分页链接不起作用。当我单击第 2 页时,我收到一个找不到页面的错误。我需要为分页页面编写自定义路由吗?
    • 请记住,在创建手动分页器时,也应该手动对数组进行切片。他们从 4.x 到 5.0 的文档中省略了这一点,最后将其添加到 5.1 文档中。
    【解决方案2】:

    我最终使用了以下代码。您必须手动传递每页的项目。 $matches 是传递给分页器的数据数组。

    $perPage = 2;
    $currentPage = Input::get('page') - 1;
    $pagedData = array_slice($matches, $currentPage * $perPage, $perPage);
    $matches = Paginator::make($pagedData, count($matches), $perPage);
    

    【讨论】:

    • 如果没有Input::get('page') 的默认值,如果没有给出查询参数,分页器将无法正常工作。你应该把它改成Input::get('page', 1)
    • 这是救命稻草! Paginator 本身应该切片 $items 为什么我们必须自己做..
    【解决方案3】:

    如果您想手动分页,这是最好的答案。当您的查询包含 distinct() 时,这很有用。

    $matches = DB::table('...')->where('...')->distict()->get();    
    $perPage = 2;
    $currentPage = Input::get('page', 1) - 1;
    $pagedData = array_slice($matches, $currentPage * $perPage, $perPage);
    $matches = Paginator::make($pagedData, count($matches), $perPage);
    

    【讨论】:

    • 非常感谢.. :) 它对我很有用..但是 :( 链接对我不起作用..你能帮帮我吗..
    • 你能告诉我更多关于你如何在页面上显示链接的信息吗?
    • 我找到了 :) 使用 $query1->setPath('function_name');... 感谢您的回复.. :)
    • @SuganyaRajasekar 你能详细说明你的答案吗
    猜你喜欢
    • 1970-01-01
    • 2013-02-20
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    • 2020-03-08
    • 2013-06-08
    • 2014-09-10
    相关资源
    最近更新 更多