【问题标题】:Laravel Paginator always returning full list on every pageLaravel Paginator 总是在每个页面上返回完整列表
【发布时间】:2015-10-22 09:32:34
【问题描述】:

我不能再使用 paginate() 方法了,因为我需要为我的集合中的每个元素添加一个额外的属性。 结果是我在渲染时得到了正确的分页,但它总是在每个页面上显示所有元素。

public function allPaginate($perPage)
{
    $initialCollection = $this->model->orderBy('created_at', 'desc')->get();

    // adding slug to my collection for every item
    $initialCollection->each(function ($item) {
        if(! isset($item->slug))
        {
            $slug = Str::slug($item->title);
            $item->slug = $slug;
        }
    });

    $result = new Paginator($initialCollection, count($initialCollection), $perPage);
    $result->setPath(Request::url());

    return $result;
}

在我刚刚使用这个之前:

$paginator = $this->model->orderBy('created_at', 'desc')->paginate($perPage);

我的数据库中有 3 个元素,我想每页显示 2 个。这是两个版本的转储文件。

应该是(使用 ->paginate()),集合中有 2 个项目

LengthAwarePaginator {#362 ▼

#总数:3

#lastPage: 2

#items:收藏{#364 ▼

#items: array:2 [▼

  0 => News {#365 ▶}

  1 => News {#366 ▶}

]

}

#perPage: 2

#currentPage: 1

#path: "http://jv.app/nl/nieuws/"

#查询:[]

#fragment: 空

#pageName: "页面"

}

现在(使用新的 Paginator::make())在集合中有 3 个项目

LengthAwarePaginator {#358 ▼

#总数:3

#lastPage: 2

#items:收藏{#368 ▼

#items: array:3 [▼

  0 => News {#369 ▶}

  1 => News {#370 ▶}

  2 => News {#371 ▶}

]

}

#perPage: 2

#currentPage: 1

#path: "http://jv.app/nl/nieuws"

#查询:[]

#fragment: 空

#pageName: "页面"

}

这里有什么问题?

【问题讨论】:

    标签: laravel paginator


    【解决方案1】:

    Laravel Paginator 类期望传递当前页面的记录。

    首先,您需要获取当前页面的值。然后您将需要更改您的查询以仅获取当前页面的记录:

    // Get current page number
    $page = 'Get this from the query string';
    
    // Calculate the offset for current page
    $offset = $perPage * ($page - 1);
    
    // Get the records for the current page
    $initialCollection = $this->model->orderBy('created_at', 'desc')->
                                skip($offset)->
                                take($perPage)->
                                get();
    
    // Get total number of records in table
    $totalRecords = $this->model->count();
    
    // Paginate
    $result = new Paginator($initialCollection, $totalRecords, $perPage);
    

    【讨论】:

    • 我在 API 的任何地方都找不到这个。谢谢!
    • 不是也需要传入当前页面吗?另外,为什么您需要非长度感知分页器的总记录?
    猜你喜欢
    • 1970-01-01
    • 2021-06-02
    • 2018-07-07
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多