简介

在其他框架中,分页可能是件非常痛苦的事,Laravel 让这件事变得简单、易于上手。Laravel 的分页器与查询构建器和 Eloquent ORM 集成在一起,并开箱提供方便的、易于使用的、基于数据库结果集的分页。分页器生成的 HTML 兼容 Bootstrap CSS 框架。

基本使用

基于查询构建器进行分页

有多种方式实现分页功能,最简单的方式就是使用查询构建器或 Eloquent 查询提供的 paginate 方法。该方法基于当前用户查看页自动设置合适的偏移(offset)和限制(limit),直白点说就是页码和每页显示数量。默认情况下,当前页通过 HTTP 请求查询字符串参数 page 的值判断。当然,该值由 Laravel 自动检测,然后自动插入分页器生成的链接中。

让我们先来看看如何在查询中调用 paginate 方法。在本例中,传递给 paginate 的唯一参数就是你每页想要显示的数目,这里我们指定每页显示 15 个:

  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use Illuminate\Support\Facades\DB;
  6. use App\Http\Controllers\Controller;
  7.  
  8. class UserController extends Controller
  9. {
  10. /**
  11. * 显示应用中的所有用户
  12. *
  13. * @return Response
  14. */
  15. public function index()
  16. {
  17. $users = DB::table('users')->paginate(15);
  18. return view('user.index', ['users' => $users]);
  19. }
  20. }

注:目前,使用 groupBy 的分页操作不能被 Laravel 有效执行,如果你需要在分页结果中使用 groupBy,推荐你手动查询数据库然后创建分页器。

1.自定义分页实现

手动创建分页器

有时候你可能想要通过传递数组数据来手动创建分页实例,你可以基于自己的需求通过创建 Illuminate\Pagination\Paginator 或 Illuminate\Pagination\LengthAwarePaginator 实例来实现。

Paginator 类不需要知道结果集中数据项的总数;不过,正因如此,该类也没有提供获取最后一页索引的方法。LengthAwarePaginator 接收参数和 Paginator 几乎一样,唯一不同在于它要求传入结果集的总数。

换句话说,Paginator 对应 simplePaginate 方法,而 LengthAwarePaginator 对应 paginate 方法。

注:当手动创建分页器实例的时候,应该手动对传递到分页器的结果集进行“切片”,如果你不确定怎么做,查看 PHP 函数 array_slice

Model类的 UserModel.php

  1. public function getList()
  2. {//获取用户列表
  3.  
  4. $perPage =3;//每页显示几条
  5. $currentPage = 3;//当前第几页
  6. $currentNum = $perPage*$currentPage;//从哪里开始产找数据
  7.  
  8. $results = DB::select('select * from user where 1 limit ?,?',[$currentNum,$perPage]);
  9.  
  10. $total = DB::select('select COUNT(id) as id from user where 1 ');//数据总数
  11. $total = $total[0];
  12. $total = $total->id;
  13.  
  14. //自定义分页类
  15. $result = new \Illuminate\Pagination\LengthAwarePaginator($results,$total,$perPage,$currentPage,['ff=ff&ee=ee','dd=dd']);
  16. $result->setPath("?pa=sf&sdf=sdf&sdkf=sdf");//如果有搜索传递参数
  17.  
  18. return $result;
  19. }

控制器的 UserController.php

  1. public function userList()
  2. {
  3. $userModel = new UserModel();
  4. $res = $userModel->getList();
  5.  
  6. var_dump(htmlspecialchars($res->render()));//打印分页
  7.  
  8. var_dump($res->render());//打印分页
  9.  
  10. dd($res);//打印结果并终止
  11. return $res;
  12. }
  1. $res->links()也可以打印分页信息

结果:

下来我看自定义的分页样式怎么弄(好像很简单,只要把样式模板导出来修改就可以了,怎么导出来了,看下面介绍):

自定义分页视图

默认情况下,用于渲染分页链接的视图兼容 Bootstrap CSS 框架,如果你没有使用Bootstrap,可以自定义视图来渲染这些链接。当调用分页器实例上的 links 方法时,传递视图名称作为第一个参数:

  1. {{ $paginator->links('view.name') }}
  2.  
  3. // 传递数据到视图...
  4. {{ $paginator->links('view.name', ['foo' => 'bar']) }}

不过,自定义分页视图最简单的方式是使用 vendor:publish 命令导出视图文件到resources/views/vendor 目录:

  1. php artisan vendor:publish --tag=laravel-pagination

该命令会将视图放到 resources/views/vendor/pagination 目录,该目录下的default.blade.php 文件对应默认的视图文件,编辑该文件即可修改分页 HTML。

如果你想要指定其他文件作为默认分页视图,可以在 AppServiceProvider 中使用分页器的 defaultView 和 defaultSimpleView 方法:

  1. use Illuminate\Pagination\Paginator;
  2.  
  3. public function boot()
  4. {
  5. Paginator::defaultView('pagination::view');
  6.  
  7. Paginator::defaultSimpleView('pagination::view');
  8. }

上面的理解:

换一个分页模板--

分页器实例方法

每个分页器实例都可以通过以下方法提供更多分页信息:

  1. $results->count()
  2. $results->currentPage()
  3. $results->firstItem()
  4. $results->hasMorePages()
  5. $results->lastItem()
  6. $results->lastPage() (使用simplePaginate 时无效)
  7. $results->nextPageUrl()
  8. $results->perPage()
  9. $results->previousPageUrl()
  10. $results->total() (使用simplePaginate 时无效)
  11. $results->url($page)

转:http://laravelacademy.org/post/8841.html

[ Laravel 5.6 文档 ]laravel数据库操作分页(自定义分页实现和自定义分页样式)的更多相关文章

  1. [ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件

    [ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件 http://laravelacademy.org/post/7812.html 简介 中间件为过滤进入应用的 ...

  2. MongoDB,无模式文档型数据库简介

    MongoDB的名字源自一个形容词humongous(巨大无比的),在向上扩展和快速处理大数据量方面,它会损失一些精度,在旧金山举行的MondoDB大会上,Merriman说:“你不适宜用它来处理复杂 ...

  3. MySQL新特性文档型数据库

    mongodb在文档型数据库这方面一直做的很好,也发展了很多年,MySQL作为一个比较大众的数据库也慢慢支持了该特性,下面介绍一下MySQL支持文档型数据库的简单操作. 环境: 主机名 IP 系统 软 ...

  4. MongoDB系列一:MongoDB文档型数据库特点介绍

    一.MongoDB数据库的存储特点: 1.MongoDB是文档型数据库,存储的是文档(将json二进制化为Bson存储): 2.存储的每篇文档都可以有自己独特的存储结构,颠覆了传统数据库必须按照表和列 ...

  5. 在Delphi中处理word文档与数据库的互联 1

    在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...

  6. 在Delphi中处理word文档与数据库的互联

    在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...

  7. shift+alt 可对notepadplusplus 打开的文档进行列操作

    shift+alt 可对notepadplusplus 打开的文档进行列操作

  8. C#使用NPOI对Word文档进行导出操作的dll最新版2.5.1

    Npoi导出非模板 最近使用NPOI做了个导出Word文档的功能,因为之前都是导出Excel很方便(不用模板),所以导出Word也选用了Npoi(也没有用模板,

  9. Laravel 5.5 文档 ] 快速入门 —— 安装配置篇

    服务器要求 Laravel 框架对PHP版本和扩展有一定要求,不过这些要求 Laravel Homestead 都已经满足了,不过如果你没有使用 Homestead 的话(那真是一件很遗憾的事情),有 ...

随机推荐

  1. 厦门海沧区磁盘只有1TB的解决方案

    厦门海沧区磁盘只有1TB的解决方案 1.为WINDOWS 2008 r2 服务器增加5个1T的硬盘 2.打开命令提示符,并键入 diskpart. 3.在“DISKPART”提示符下,键入 list ...

  2. 去除整站下载文件中的tppabs等冗余代码

    用TeleprotUltra复制了一个网站,结果网页中出现了很多形如tppabs=””的冗余代码,点击vs中的“在文件中查找”图标,打开“查找和替换”对话框,转到“快速替换”,然后进行以下设置: “查 ...

  3. 请教一下16aspx上的源代码要如何在自己的服务器上运行

    很正常呀,,我下载的也有运行不成功的你要去他们16aspx论坛发帖子问这里很少有人回答你这样的问题

  4. Codeforces Gym 101194G Pandaria (2016 ACM-ICPC EC-Final G题, 并查集 + 线段树合并)

    题目链接  2016 ACM-ICPC EC-Final Problem G 题意  给定一个无向图.每个点有一种颜色. 现在给定$q$个询问,每次询问$x$和$w$,求所有能通过边权值不超过$w$的 ...

  5. 前端常用面试题目及答案-HTML&CSS篇

    1. 行内元素和块级元素有哪些? 行内元素: 123456789101112131415161718192021222324252627 <a>     //标签可定义锚   <ab ...

  6. Android Developer -- Bluetooth篇 开发实例之三 管理连接

    Managing a Connection When you have successfully connected two (or more) devices, each one will have ...

  7. layout layout_alignLeft跟layout_toLeftOf

    今天调布局的时候 想把界面做成横屏竖屏都可以的 突然发现之前理解的android:布局参数都是有问题的 今天贴出来 下次自己也记得 以下大部为用在RelativeLayout中的一些参数: andro ...

  8. IntelliJ IDEA控制台Console里没有查找快捷键

    问题描述:之前的项目一直用的 Eclipse,习惯了其快捷键的使用,现在的项目换到IntelliJ IDEA,为了尽快上手,就把快捷键Keymap修改为Eclipse方式.发现在控制台Console里 ...

  9. word如何修改尾注

    两篇处理利用尾注处理参考文献的方式,值得注意. 实用技巧:Word 2003中修改尾注位置http://www.kuqin.com/shuoit/20090422/47316.html Word尾注格 ...

  10. barrier and Fence

    barrier 管理的是commandbuffer里面 command之间 fence管理的是queue之间 queue和cpu之间的顺序 通过flag比如等待所有面片画完 ------------- ...