[ Laravel 5.6 文档 ]laravel数据库操作分页(自定义分页实现和自定义分页样式)
简介
在其他框架中,分页可能是件非常痛苦的事,Laravel 让这件事变得简单、易于上手。Laravel 的分页器与查询构建器和 Eloquent ORM 集成在一起,并开箱提供方便的、易于使用的、基于数据库结果集的分页。分页器生成的 HTML 兼容 Bootstrap CSS 框架。
基本使用
基于查询构建器进行分页
有多种方式实现分页功能,最简单的方式就是使用查询构建器或 Eloquent 查询提供的 paginate
方法。该方法基于当前用户查看页自动设置合适的偏移(offset)和限制(limit),直白点说就是页码和每页显示数量。默认情况下,当前页通过 HTTP 请求查询字符串参数 page
的值判断。当然,该值由 Laravel 自动检测,然后自动插入分页器生成的链接中。
让我们先来看看如何在查询中调用 paginate
方法。在本例中,传递给 paginate
的唯一参数就是你每页想要显示的数目,这里我们指定每页显示 15
个:
- <?php
- namespace App\Http\Controllers;
- use Illuminate\Support\Facades\DB;
- use App\Http\Controllers\Controller;
- class UserController extends Controller
- {
- /**
- * 显示应用中的所有用户
- *
- * @return Response
- */
- public function index()
- {
- $users = DB::table('users')->paginate(15);
- return view('user.index', ['users' => $users]);
- }
- }
注:目前,使用 groupBy
的分页操作不能被 Laravel 有效执行,如果你需要在分页结果中使用 groupBy
,推荐你手动查询数据库然后创建分页器。
1.自定义分页实现
手动创建分页器
有时候你可能想要通过传递数组数据来手动创建分页实例,你可以基于自己的需求通过创建 Illuminate\Pagination\Paginator
或 Illuminate\Pagination\LengthAwarePaginator
实例来实现。
Paginator
类不需要知道结果集中数据项的总数;不过,正因如此,该类也没有提供获取最后一页索引的方法。LengthAwarePaginator
接收参数和 Paginator
几乎一样,唯一不同在于它要求传入结果集的总数。
换句话说,Paginator
对应 simplePaginate
方法,而 LengthAwarePaginator
对应 paginate
方法。
注:当手动创建分页器实例的时候,应该手动对传递到分页器的结果集进行“切片”,如果你不确定怎么做,查看 PHP 函数 array_slice。
Model类的 UserModel.php
- public function getList()
- {//获取用户列表
- $perPage =3;//每页显示几条
- $currentPage = 3;//当前第几页
- $currentNum = $perPage*$currentPage;//从哪里开始产找数据
- $results = DB::select('select * from user where 1 limit ?,?',[$currentNum,$perPage]);
- $total = DB::select('select COUNT(id) as id from user where 1 ');//数据总数
- $total = $total[0];
- $total = $total->id;
- //自定义分页类
- $result = new \Illuminate\Pagination\LengthAwarePaginator($results,$total,$perPage,$currentPage,['ff=ff&ee=ee','dd=dd']);
- $result->setPath("?pa=sf&sdf=sdf&sdkf=sdf");//如果有搜索传递参数
- return $result;
- }
控制器的 UserController.php
- public function userList()
- {
- $userModel = new UserModel();
- $res = $userModel->getList();
- var_dump(htmlspecialchars($res->render()));//打印分页
- var_dump($res->render());//打印分页
- dd($res);//打印结果并终止
- return $res;
- }
- $res->links()也可以打印分页信息
结果:
下来我看自定义的分页样式怎么弄(好像很简单,只要把样式模板导出来修改就可以了,怎么导出来了,看下面介绍):
自定义分页视图
默认情况下,用于渲染分页链接的视图兼容 Bootstrap CSS 框架,如果你没有使用Bootstrap,可以自定义视图来渲染这些链接。当调用分页器实例上的 links
方法时,传递视图名称作为第一个参数:
- {{ $paginator->links('view.name') }}
- // 传递数据到视图...
- {{ $paginator->links('view.name', ['foo' => 'bar']) }}
不过,自定义分页视图最简单的方式是使用 vendor:publish
命令导出视图文件到resources/views/vendor
目录:
- php artisan vendor:publish --tag=laravel-pagination
该命令会将视图放到 resources/views/vendor/pagination
目录,该目录下的default.blade.php
文件对应默认的视图文件,编辑该文件即可修改分页 HTML。
如果你想要指定其他文件作为默认分页视图,可以在 AppServiceProvider
中使用分页器的 defaultView
和 defaultSimpleView
方法:
- use Illuminate\Pagination\Paginator;
- public function boot()
- {
- Paginator::defaultView('pagination::view');
- Paginator::defaultSimpleView('pagination::view');
- }
上面的理解:
换一个分页模板--
分页器实例方法
每个分页器实例都可以通过以下方法提供更多分页信息:
- $results->count()
- $results->currentPage()
- $results->firstItem()
- $results->hasMorePages()
- $results->lastItem()
- $results->lastPage() (使用simplePaginate 时无效)
- $results->nextPageUrl()
- $results->perPage()
- $results->previousPageUrl()
- $results->total() (使用simplePaginate 时无效)
- $results->url($page)
转:http://laravelacademy.org/post/8841.html
[ Laravel 5.6 文档 ]laravel数据库操作分页(自定义分页实现和自定义分页样式)的更多相关文章
- [ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件
[ Laravel 5.5 文档 ] 处理用户请求 —— HTTP 请求的过滤器:中间件 http://laravelacademy.org/post/7812.html 简介 中间件为过滤进入应用的 ...
- MongoDB,无模式文档型数据库简介
MongoDB的名字源自一个形容词humongous(巨大无比的),在向上扩展和快速处理大数据量方面,它会损失一些精度,在旧金山举行的MondoDB大会上,Merriman说:“你不适宜用它来处理复杂 ...
- MySQL新特性文档型数据库
mongodb在文档型数据库这方面一直做的很好,也发展了很多年,MySQL作为一个比较大众的数据库也慢慢支持了该特性,下面介绍一下MySQL支持文档型数据库的简单操作. 环境: 主机名 IP 系统 软 ...
- MongoDB系列一:MongoDB文档型数据库特点介绍
一.MongoDB数据库的存储特点: 1.MongoDB是文档型数据库,存储的是文档(将json二进制化为Bson存储): 2.存储的每篇文档都可以有自己独特的存储结构,颠覆了传统数据库必须按照表和列 ...
- 在Delphi中处理word文档与数据库的互联 1
在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...
- 在Delphi中处理word文档与数据库的互联
在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...
- shift+alt 可对notepadplusplus 打开的文档进行列操作
shift+alt 可对notepadplusplus 打开的文档进行列操作
- C#使用NPOI对Word文档进行导出操作的dll最新版2.5.1
Npoi导出非模板 最近使用NPOI做了个导出Word文档的功能,因为之前都是导出Excel很方便(不用模板),所以导出Word也选用了Npoi(也没有用模板,
- Laravel 5.5 文档 ] 快速入门 —— 安装配置篇
服务器要求 Laravel 框架对PHP版本和扩展有一定要求,不过这些要求 Laravel Homestead 都已经满足了,不过如果你没有使用 Homestead 的话(那真是一件很遗憾的事情),有 ...
随机推荐
- 厦门海沧区磁盘只有1TB的解决方案
厦门海沧区磁盘只有1TB的解决方案 1.为WINDOWS 2008 r2 服务器增加5个1T的硬盘 2.打开命令提示符,并键入 diskpart. 3.在“DISKPART”提示符下,键入 list ...
- 去除整站下载文件中的tppabs等冗余代码
用TeleprotUltra复制了一个网站,结果网页中出现了很多形如tppabs=””的冗余代码,点击vs中的“在文件中查找”图标,打开“查找和替换”对话框,转到“快速替换”,然后进行以下设置: “查 ...
- 请教一下16aspx上的源代码要如何在自己的服务器上运行
很正常呀,,我下载的也有运行不成功的你要去他们16aspx论坛发帖子问这里很少有人回答你这样的问题
- Codeforces Gym 101194G Pandaria (2016 ACM-ICPC EC-Final G题, 并查集 + 线段树合并)
题目链接 2016 ACM-ICPC EC-Final Problem G 题意 给定一个无向图.每个点有一种颜色. 现在给定$q$个询问,每次询问$x$和$w$,求所有能通过边权值不超过$w$的 ...
- 前端常用面试题目及答案-HTML&CSS篇
1. 行内元素和块级元素有哪些? 行内元素: 123456789101112131415161718192021222324252627 <a> //标签可定义锚 <ab ...
- Android Developer -- Bluetooth篇 开发实例之三 管理连接
Managing a Connection When you have successfully connected two (or more) devices, each one will have ...
- layout layout_alignLeft跟layout_toLeftOf
今天调布局的时候 想把界面做成横屏竖屏都可以的 突然发现之前理解的android:布局参数都是有问题的 今天贴出来 下次自己也记得 以下大部为用在RelativeLayout中的一些参数: andro ...
- IntelliJ IDEA控制台Console里没有查找快捷键
问题描述:之前的项目一直用的 Eclipse,习惯了其快捷键的使用,现在的项目换到IntelliJ IDEA,为了尽快上手,就把快捷键Keymap修改为Eclipse方式.发现在控制台Console里 ...
- word如何修改尾注
两篇处理利用尾注处理参考文献的方式,值得注意. 实用技巧:Word 2003中修改尾注位置http://www.kuqin.com/shuoit/20090422/47316.html Word尾注格 ...
- barrier and Fence
barrier 管理的是commandbuffer里面 command之间 fence管理的是queue之间 queue和cpu之间的顺序 通过flag比如等待所有面片画完 ------------- ...