我遇到了重写L5分页的问题,现在缺少以前的方法。具体为lastPage()
和total()
。
这是疏忽吗(在这种情况下,我很乐意提交问题/公关)?
我应该能够通过收藏并自己计算吗?我相信旧的paginator允许使用__call()
这样的内容,但Illuminate\Pagination\Paginator.php
似乎甚至不会引用整个Collection。它会立即将$items
切成匹配$perPage
,让我无法自行计算总页数或最后一页。
我应该使用LengthAwarePaginator
吗?如果是这样,我不应该Illuminate\Database\Eloquent\Builder::paginate()
返回LengthAwarePaginator
而不是Paginator
吗?我试图对数据库集合进行分页,然后获取Paginator
的实例。
我只是想确保理解L5中分页背后的想法/方向,然后再假设有错误并提交GH问题或修复。
Udate :现在已经发布了Laravel 5,这不再是一个问题。我在Builder上LengthAwarePaginator
时得到paginate()
。
答案 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()