Laravel-分页随机排列的数组

时间:2019-10-31 09:45:54

标签: php laravel laravel-5

我想对元素的随机排列进行分页。我知道Laravel Paginator希望有一个Collection。更详细地讲,我想从数据库中重新排列结果集。因此,我有以下代码行:

$getallFragen = $frage->getAllFragen2()->shuffle()->all();

此行选择所有问题并随机整理集合。

此外,我想将问题的答案改编,这也可以正常工作。然后,我想用每页一个项目对项目进行分页,这也可以正常工作,但是我在分页中收到重复的项目。首先,我想必须是集合,但是集合构建正确,我不知道可能是什么问题。我可以想象,我自己的分页器无法正常工作。我还创建了一个数组,用于存储考试中允许的项目,然后从数组中进行收集以确保没有重复的条目。

$currentPage = LengthAwarePaginator::resolveCurrentPage();
$itemCollection = collect($pruefung);
$perPage = 1;
$currentPageItems = $itemCollection->slice(($currentPage * $perPage) - $perPage, $perPage)->all();
$paginatedItems = new LengthAwarePaginator($currentPageItems, count($itemCollection), $perPage);

$paginatedItems->setPath($request->url());

return view('pruefungssimulation', ["fragen" => $paginatedItems]);

在前端,我只用@foreach($fragen as $frage)从集合中取出所有项目。

1 个答案:

答案 0 :(得分:2)

我认为问题在于,当您转到下一页时,该收藏集会再次洗牌。

一个例子:

假设您有一个收藏集[1, 2, 3]。改组此集合时,您可以获得[2, 1, 3]。当您在首页上时,这意味着您会看到项目1。

当您转到下一页时,该收藏集将再次随机播放。这意味着集合可以相同,也可以是[1, 3, 2][3, 1, 2]。因此,当您看到第2页时,看到的项目可能是项目3,项目2或项目1(再次)。

解决方案:

如果要保留改组的订单,则必须将此订单保存在某处,以便每次请求下一页/上一页时都可以使用。