Laravel 5分页问题

时间:2014-10-23 19:14:10

标签: php laravel-5

我遇到了重写L5分页的问题,现在缺少以前的方法。具体为lastPage()total()

  1. 这是疏忽吗(在这种情况下,我很乐意提交问题/公关)?

  2. 我应该能够通过收藏并自己计算吗?我相信旧的paginator允许使用__call()这样的内容,但Illuminate\Pagination\Paginator.php似乎甚至不会引用整个Collection。它会立即将$items切成匹配$perPage,让我无法自行计算总页数或最后一页。

  3. 我应该使用LengthAwarePaginator吗?如果是这样,我不应该Illuminate\Database\Eloquent\Builder::paginate()返回LengthAwarePaginator而不是Paginator吗?我试图对数据库集合进行分页,然后获取Paginator的实例。

  4. 我只是想确保理解L5中分页背后的想法/方向,然后再假设有错误并提交GH问题或修复。

    Udate :现在已经发布了Laravel 5,这不再是一个问题。我在Builder上LengthAwarePaginator时得到paginate()

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。这就是我所做的扩展了雄辩的构建器类。 因为我已经扩展了模型,所以从那里加载了新的构建器。

您可以像这样

从扩展模型加载新构建器
public function newEloquentBuilder($query)
{
   return new \App\ExtendedBuilder($query);
}
瞧,我有扩展的建设者 ..................

<?php namespace App;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Pagination\Paginator;
use Illuminate\Pagination\LengthAwarePaginator;

class ExtendedBuilder extends Builder{

public function lengthawarepaginate($perPage = null, $columns = ['*'])
{
    $page = Paginator::resolveCurrentPage();

    $perPage = $perPage ?: $this->model->getPerPage();

    $this->skip(($page - 1) * $perPage)->take($perPage);

    $queryClone = clone ($this->getQuery());

    $total = $queryClone->skip(0)->take($perPage + 1)->count($columns);


    return new LengthAwarePaginator($this->get($columns)->all(),$total, $perPage, $page, [
        'path' => Paginator::resolveCurrentPath()
    ]);
}

}

this is where i got the original code from

不确定这是否是最好的方法,但效果很好。

答案 1 :(得分:0)

好吧,现在Laravel支持分页总数

你可以这样使用

  

$ total = $ paginatedCollection-&gt; total()