我在重写L5分页时遇到了问题,以前的方法现在丢失了。具体为CCD_ 1和CCD_。
-
这是疏忽吗(在这种情况下,我很乐意提交问题/PR)?
-
我应该能够接通Collection并自己计算吗?我相信旧的分页器允许
__call()
出现这样的情况,但是Illuminate'Pagination'Paginator.php
似乎甚至没有保留对整个Collection的引用。它立即对$items
进行切片以匹配$perPage
,使我无法单独计算total或lastPage。 -
我应该使用
LengthAwarePaginator
吗?如果是,Illuminate'Database'Eloquent'Builder::paginate()
不应该返回LengthAwarePaginator
而不是lastPage()
0吗?我正在尝试对一个DB集合进行分页,并获取一个Paginator
的实例。
我只是想确保我理解L5中分页背后的想法/方向,然后再假设存在错误并提交GH问题或修复程序。
Udate:现在Laravel 5已经发布,这不再是一个问题。当我在Builder上paginate()
时,我得到了一个LengthAwarePaginator
。
我遇到了同样的问题。以下是我所做的扩展了雄辩建设者类。由于我已经扩展了模型,所以从那里加载了新的构建器。
你可以从这个这样的扩展模型中加载新的构建器
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()
]);
}
}
这是我从获得原始代码的地方
不确定这是否是最好的方法,但效果很好。
好吧,现在Laravel支持分页总
你可以像这样使用
$total=$paginatedCollection->total()