我不能再使用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▼
#total:3
#lastPage:2
#items:Collection {#364▼
#items: array:2 [▼
0 => News {#365 ▶}
1 => News {#366 ▶}
]
}
#perPage:2
#cPage:1
#path:“http://jv.app/nl/nieuws/”
#query:[]
#fragment:null
#pageName:“page”
}
现在(使用新的Paginator :: make())在集合中有3个项目
LengthAwarePaginator {#358▼
#total:3
#lastPage:2
#items:Collection {#368▼
#items: array:3 [▼
0 => News {#369 ▶}
1 => News {#370 ▶}
2 => News {#371 ▶}
]
}
#perPage:2
#cPage:1
#path:“http://jv.app/nl/nieuws”
#query:[]
#fragment:null
#pageName:“page”
}
这里有什么问题?
答案 0 :(得分:3)
Laravels 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);