【发布时间】:2016-11-25 03:31:57
【问题描述】:
我在我的 Laravel 应用程序中遇到了分页问题。 通常,当我想使用 Laravel 分页时,假设一页有 3 行,我使用 Eloquent 方法 paginate/simplePaginate 结合方法 latest() 如下:
//MyController.php
$posts= Post->latest()->paginate(3);
//MyView.blade.php
@foreach ($posts as $post)
{{ $post->id }}
@endforeach
{{ $posts->links() }}
所以当我的数据库中有 6 个帖子并且我使用 Laravel 分页 + 无限滚动时,就会变成:
6
5 (1. page)
4
--- ('page separator')
3
2 (2. page)
1
但是,如果用户在我到达第 2 页之前将新行插入到数据库表中, 集合发生变化,第二页数据变为:
6
5 (1. page)
4
--- POST WITH ID 4 IS DUPLICATED BECAUSE OF SHIFT IN COLLECTION
4
3 (2. page)
2
因此,例如 --- 如果用户在我到达分页器之前将三个新行插入数据库,那么第二页将输出与我当前第一页相同的三个表行,但我想输出剩余的表行:
6
5 (1. page)
4
--- AT SOME TIME BEFORE PAGINATION WAS TRIGGERED, POST WITH ID '7' HAS BEEN ADDED
3
2 (2. page) - continues normally with remaining rows (pagination ignores newly added row)
1
这个问题有解决办法吗?
谢谢。
【问题讨论】:
-
在查询中使用最新项目的
id。您可以在页面向下滚动时发送最新的 id。 -
您好,谢谢您的回答。这听起来是个好主意,但我不知道该怎么做;页面加载后是否可以向 Laravel 控制器发送一些变量?
-
当您向下滚动页面时,在每个列表的底部,您发送一个 xhr 以从 api 检索新项目,并使用该请求发送 id。
-
对不起,我不太明白如何使用 Laravel 中内置的分页功能来做到这一点。我需要自己写分页函数还是可以继续使用 Laravel 的?
标签: laravel pagination duplicates infinite-scroll