laravel - 分页不考虑结果的变化
问题描述
我在 Laravel 中使用 paginate 来加载大量数据。快速变化的数据。问题是当用户滚动数据时,新的行被插入到顶部。这会产生一个问题,即用户在用户加载第 1 页和第 2 页之间的时间内看到从第 1 页推到第 2 页的重复行。例如:
数据:
- D
- 乙
- F
用户 A 使用 ->simplePaginate(2) 加载结果。
第 1 页加载:
结果:
- D
- 乙
在数据库中插入一行。
数据:
- C
- D
- 乙
- F
用户 A 现在在页面 #1 上滚动浏览他的结果,页面 #2 加载:
结果:
- 乙
- F
用户 A 现在刚刚看到:
- D
- 乙
- E <-- 错误
- F
有没有办法在加载第二页时轻松解决这个问题?
用户 A 应该看到
- D
- 乙
- F
当用户 A 加载第 2 页并说“嘿,现在顶部有新结果”时传递一些信息也会非常酷。
解决方案
在第 1 页上获取时间戳,然后在查询中添加一个附加子句,断言该子句created_at
位于时间戳之前。
$beforeTime = $request->input('before_time', Carbon::now());
$items = Item::where('created_at', '<=', $beforeTime)->paginate(2);
最后,确保将before_time
参数附加到分页链接:
echo $items->appends(['before_time' => $beforeTime])->links();
推荐阅读
- mysql - 从多个表Mysql查询中计算总数
- wordpress - 如何使用 wordpress 将多步骤联系表单集成到翻转框中?
- asp.net-mvc - 无法在 nopcommerce 3.80 的管理控制器中加载方法
- angular - Angular 7 PATCH 方法将元素添加到列表
- javascript - 如何使用 javascript 将 HTML 网页上的字符串替换为另一个字符串?
- php - 如何修复类 LetterGenerator 的对象无法在 Laravel 中转换为字符串?
- angular - 错误:[HPM] 上下文无效。期待类似:“/api”或[“/api”,“/ajax”]
- javascript - 如何动态结束加载动画
- jax-rs - /voterRestService 上已经有一个端点正在运行
- c - printw() 和 mvwprintw() 不打印