Laravel 分页器总是在每一页上返回完整列表
Laravel Paginator always returning full list on every page
我不能再使用 paginate() 方法了,因为我需要为 collection 中的每个元素添加一个额外的属性。
结果是我在渲染时得到了正确的分页,但它总是在每一页上显示所有元素。
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())在 collection
中有 2 个项目
LengthAwarePaginator {#362 ▼
#总计:3
#lastPage: 2
#items: Collection {#364 ▼
#items: array:2 [▼
0 => News {#365 ▶}
1 => News {#366 ▶}
]
}
#每页:2
#currentPage: 1
#路径:“http://jv.app/nl/nieuws/”
#查询:[]
#片段:空
#pageName: "page"
}
现在(使用新的 Paginator::make())在 collection
中有 3 个项目
LengthAwarePaginator {#358 ▼
#总计:3
#lastPage: 2
#items: Collection {#368 ▼
#items: array:3 [▼
0 => News {#369 ▶}
1 => News {#370 ▶}
2 => News {#371 ▶}
]
}
#每页:2
#currentPage: 1
#路径:“http://jv.app/nl/nieuws”
#查询:[]
#片段:空
#pageName: "page"
}
这里有什么问题?
Laravels Paginator
class 期望传递当前页面的记录。
首先您需要获取当前页面的值。然后您需要更改查询以仅获取当前页面的记录:
// 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);
我不能再使用 paginate() 方法了,因为我需要为 collection 中的每个元素添加一个额外的属性。 结果是我在渲染时得到了正确的分页,但它总是在每一页上显示所有元素。
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())在 collection
中有 2 个项目LengthAwarePaginator {#362 ▼
#总计:3
#lastPage: 2
#items: Collection {#364 ▼
#items: array:2 [▼
0 => News {#365 ▶}
1 => News {#366 ▶}
]
}
#每页:2
#currentPage: 1
#路径:“http://jv.app/nl/nieuws/”
#查询:[]
#片段:空
#pageName: "page"
}
现在(使用新的 Paginator::make())在 collection
中有 3 个项目LengthAwarePaginator {#358 ▼
#总计:3
#lastPage: 2
#items: Collection {#368 ▼
#items: array:3 [▼
0 => News {#369 ▶}
1 => News {#370 ▶}
2 => News {#371 ▶}
]
}
#每页:2
#currentPage: 1
#路径:“http://jv.app/nl/nieuws”
#查询:[]
#片段:空
#pageName: "page"
}
这里有什么问题?
Laravels Paginator
class 期望传递当前页面的记录。
首先您需要获取当前页面的值。然后您需要更改查询以仅获取当前页面的记录:
// 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);