1

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

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

  2. 我应该能够通过 Collection 自己计算吗?我相信旧的分页器允许这样的事情__call(),但Illuminate\Pagination\Paginator.php似乎甚至没有保留对完整集合的引用。它立即将 切片$items以匹配$perPage,让我无法自己计算总计或 lastPage 。

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

在我假设存在错误并提交 GH 问题或修复之前,我只是想确保我了解 L5 中分页背后的想法/方向。

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

4

2 回答 2

2

我遇到了同样的问题。这是我所做的扩展 eloquent builder 类的方法。并且由于我已经扩展了模型,因此从那里加载了新的构建器。

您可以像这样从扩展模型中加载新构建器

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()
    ]);
}

}

这是我从中获得原始代码的地方

不确定这是否是最好的方法,但它工作正常。

于 2014-10-28T09:57:03.460 回答
0

好了,现在 Laravel 支持分页了

你可以这样使用

$total = $paginatedCollection->total()

于 2015-02-27T14:00:06.527 回答