游标分页正确使用姿势

youfeed

问题描述

在加载网站素材资源时候:且还是滚动加载的情况;
使用 Fetch POST JSON形式请求数据

使用游标分页
Material::where(['type'=>'image'])->orderBy('uuid','desc')->cursorPaginate(5);
返回

{
    "path": "/image",
    "per_page": 5,
    "next_cursor": "eyJ1dWlkIjoxMDA2LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9",
    "next_page_url": "?cursor=eyJ1dWlkIjoxMDA2LCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9",
    "prev_cursor": null,
    "prev_page_url": null
}

如何进行加载下一页碰到问题:

下一页请求:

Material::where(['type'=>'image'])->orderBy('uuid','desc')->cursorPaginate(3, '*', $cursor);

这是错误的:它的三个参数的意思分别是:

  • 3 每页分页数量
  • * 要返回那些字段
  • $cursor 不是你给他传变量:而是告诉它去 $request->input(NAME)NAME就行了

文档还是翻得太少~

Modelprotected $casts = 应该可以定义一些字段

模型中: getCursorName 可以定义第三个参数

   public function getCursorName(): string
    {
        return 'cursor_other';
    }

\vendor\illuminate\pagination\AbstractCursorPaginator.php 还有些参数可以定义

248 1 1
1个回答

lunzi
Material::query()
    ->where(['type'=>'image'])
    ->orderBy('uuid','desc')
    ->cursorPaginate($request->query('per_page', 20))
    ->appends($request->query());
  • 暂无评论
×
🔝