【问题标题】:Laravel 5 pagination issuesLaravel 5分页问题
【发布时间】:2014-10-23 19:14:09
【问题描述】:

我在重写 L5 分页时遇到了问题,以前的方法现在丢失了。特别是lastPage()total()

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

  2. 我应该能够通过 Collection 自己计算吗?我相信旧的分页器允许使用__call() 进行类似的操作,但是Illuminate\Pagination\Paginator.php 似乎甚至没有保留对完整集合的引用。它会立即对$items 进行切片以匹配$perPage,让我无法自己计算总页数或最后一页。

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

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

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

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

    我遇到了同样的问题。这是我所做的扩展 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()
        ]);
    }
    

    }

    this is where i got the original code from

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

    【讨论】:

      【解决方案2】:

      嗯,现在 Laravel 支持分页了

      你可以这样使用

      $total = $paginatedCollection->total()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-11
        • 1970-01-01
        • 2016-05-14
        • 2023-03-03
        • 2017-11-22
        • 2017-11-30
        • 2018-09-09
        • 2021-05-01
        相关资源
        最近更新 更多