首页 > 解决方案 > 分页不考虑结果的变化

问题描述

我在 Laravel 中使用 paginate 来加载大量数据。快速变化的数据。问题是当用户滚动数据时,新的行被插入到顶部。这会产生一个问题,即用户在用户加载第 1 页和第 2 页之间的时间内看到从第 1 页推到第 2 页的重复行。例如:

数据:

  1. D
  2. F

用户 A 使用 ->simplePaginate(2) 加载结果。

第 1 页加载:

结果:

  1. D

在数据库中插入一行。

数据:

  1. C
  2. D
  3. F

用户 A 现在在页面 #1 上滚动浏览他的结果,页面 #2 加载:

结果:

  1. F

用户 A 现在刚刚看到:

  1. D
  2. E <-- 错误
  3. F

有没有办法在加载第二页时轻松解决这个问题?

用户 A 应该看到

  1. D
  2. F

当用户 A 加载第 2 页并说“嘿,现在顶部有新结果”时传递一些信息也会非常酷。

标签: laravellaravel-query-builderlaravel-paginate

解决方案


在第 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();

推荐阅读