首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有列的PHP中的游标分页

带有列的PHP中的游标分页
EN

Stack Overflow用户
提问于 2019-01-08 08:48:57
回答 2查看 2.2K关注 0票数 0

我正在使用Laravel version 5.2。由于它有大量的数据,所以我使用游标pagiations,如下表所示,它具有primary idname字段。

代码语言:javascript
复制
for page 1 -> select * from table LIMIT 10

For page 2 -> select * from table where id < $lastpagelastementID LIMIT 10

同样,如果我们按照name列进行排序,我们如何处理这个cursor pagination

有什么选择吗?

我们可以使用Laravel分页,如

Laravel Pagination

但我需要像上面那样的光标分页。有人能帮我找到解决办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-08 09:06:29

您可以使用以下方法通过composer安装此软件包:

代码语言:javascript
复制
composer require juampi92/cursor-pagination

Config

若要将配置文件发布到config/cursor_pagination.php,请运行:

代码语言:javascript
复制
php artisan vendor:publish --provider="Juampi92\CursorPagination\CursorPaginationServiceProvider" --tag="config"

它是如何工作的

游标分页背后的主要思想是,它需要一个上下文来知道下一步要显示什么结果。所以,你不是说page=2,而是next_cursor=10。结果与传统的页面分页相同,但是现在您对输出有了更多的控制,因为next_cursor=10应该始终返回相同的内容(除非删除一些记录)。

Pros

  • 新行不会影响结果,因此在分页时不会产生重复的结果。
  • 使用索引游标进行筛选要比使用数据库偏移量快得多。
  • 使用先前的游标避免重复第一个元素。

Cons

  • 没有上一页,尽管浏览器仍然有它们。
  • 没有导航到任意页面(必须知道前面的结果才能知道下一个结果)。

按下查询生成器结果

有几种方法对项进行分页。最简单的方法是在查询生成器雄辩查询上使用方法。cursorPaginate方法自动负责设置适当的限制,并根据用户正在查看的游标获取下一个或以前的元素。默认情况下,cursor由HTTP请求上的页面查询字符串参数的值检测到。此值由包自动检测,同时考虑到您的自定义配置,还会自动插入由分页器生成的链接和元。

代码语言:javascript
复制
public function index()
{
    $users = DB::table('users')->cursorPaginate();
    return $users;
}
票数 0
EN

Stack Overflow用户

发布于 2019-01-08 09:15:27

我想这能解决你的问题。这是一种定制的分页

在您的刀片视图文件:

代码语言:javascript
复制
<!-- pass variable page with a value 
     this generation of your pagination
     should be based to the number of rows
     of your table in the database and not
     static. use foreach for this.
-->
<a href="pagination?page=1">1</a>
...

在“主计长”中:

代码语言:javascript
复制
public function pagination(Request $request){
    // set the target page to 0 if page is 1 or null
    // else get the value 
    $targetPage = ($request->input('page') == 1 || !$request->input('page')) ? 0 : ($request->input('page') - 1) ;
    $noOfDataToGet = 10;      

    // get the number of data and skip the data based of target page * number of data        
    $tables = Tables::take($noOfDataToGet)->skip($targetPage * $noOfDataToGet)->get();
}

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54088151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档