简介

在其他框架中,分页可能是件非常痛苦的事,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数据库操作分页(自定义分页实现和自定义分页样式)的更多相关文章

  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. UpdateLayeredWindow后,使用Gdi DrawText文字透明的解决办法

    来源:http://stackoverflow.com/questions/5309914/updatelayeredwindow-and-drawtext 要点就是在先在memDc DrawText ...

  2. 用fiddler测试移动端翻页

    大家在移动端是怎么测试翻页的,肯定都是下拉或上滑吧,我也是这样测试的 但如果你要验证数据是否与pc端数据一致时,可能是第一页,第二页看看,或最后几页数据看看,在pc端看简单,直接点击最后一页就行,在移 ...

  3. 【bzoj2190】【仪仗队】欧拉函数+线性筛(浅尝ACM-J)

    向大(hei)佬(e)势力学(di)习(tou) Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪 ...

  4. elasticsearch 插件使用

    5.3.0新版本好像插件和开源的项目没有以前的多,官网就那么几个 常用的先安装Kibana: 提供炫丽的可视化图形展示并且作为elasticsearch的搜索的小清新客户端 1.下载安装包  wget ...

  5. Linux Programmer's Manual --- reboot

    REBOOT(2) Linux Programmer's Manual REBOOT(2) NAME reboot - reboot or enable/disable Ctrl-Alt-Del SY ...

  6. Android开发必须知道SERVICE的10件事

    这些年我在和其他安卓攻城狮交流时经常谈到的一个话题就是Service组件被开发者错误地理解,不管是新手还是老司机.这篇文章就是交流的成果. 这篇文章不会讲解Service的使用方法,这个要去看官方的( ...

  7. eclipse进行Debug的时候,发出“java breakpoint unable to install breakpoint”错误

    错误情况图: 问题的解决方法: 直接点击忽略掉:Don't tell me again 来自网上的答案~~ I had the same error message in Eclipse 3.4.1, ...

  8. S5PV210之内外存学习

    RAM,内部存储器,用来运行程序(DRAM,SRAM,DDR) ROM,外部存储器,存储数据.程序(硬盘,FLASH等) 内存:SRAM,静态内存,容量下,价格高,不需要初始化,上电后直接使用 DRA ...

  9. spring boot 使用mybatis-generator

    mybatis-generator官网: http://www.mybatis.org/generator/running/runningWithMaven.html 在pom.xml中的 build ...

  10. ElasticSearch高级查询

    ElasticSearch高级查询 https://www.imooc.com/video/15759/0 ElasticSearch查询 1,子条件查询:特定字段查询所指特定值 1.1query c ...