laravel手动创建数组分页的实现代码


Posted in PHP onJune 07, 2018

本文介绍了laravel手动创建数组分页的实现代码,分享给大家,具体如下:

laravel手动创建数组分页的实现代码

laravel分页功能:

有几种方法可以对数据进行分页。最简单的是在 [查询语句构造器] 或 [Eloquent 查询] 中使用 paginate 或 simplePaginate 方法。

paginate用法如下:

//控制器中
$users = DB::table('users')->paginate(15);
return view('user.index', ['users' => $users]);

//视图中
{{ $users->links() }}

效果如下:

「上一页」 「1」「2」「3」 「下一页」

simplePaginate用法如下:

//控制器中
$users = User::where('votes', '>', 100)->simplePaginate(15);
return view('user.index', compact('users'));

//视图中
{{ $users->links() }}

效果如下:

「上一页」 「下一页」

注意:

  1. 如果你只需要在分页视图中显示简单的「下一页」和「上一页」的链接,即不需要显示每个页码的链接,更推荐使用 simplePaginate 方法来执行更高效的查询。
  2. 目前,Laravel 无法高效执行使用 groupBy 语句的分页操作。如果你需要在分页结果集中使用 groupBy,建议你查询数据库并手动创建分页器。

有时候可能会遇到这种情况,$dataA和$dataB是从数据库取出的两个不同的数据集合,需要同时将$dataA和$dataB分配到视图并进行分页展示,那这种情况怎么办呢?

laravel手动创建数组分页的实现代码

这种情况可以采用laravel数组分页。

其实在laravel文档中已经有写如何自己使用分页类去分页了,但没有 详细说明。

手动创建分页

如果你想手动创建分页实例并且最终得到一个数组类型的结果,可以根据需求来创建 IlluminatePaginationPaginator 或者 IlluminatePaginationLengthAwarePaginator 实例来实现。

具体可以看IlluminatePaginationLengthAwarePaginator中的这段代码:

public function __construct($items, $total, $perPage, $currentPage = null, array $options = [])
 {
  foreach ($options as $key => $value) {
   $this->{$key} = $value;
  }

  $this->total = $total;
  $this->perPage = $perPage;
  $this->lastPage = max((int) ceil($total / $perPage), 1);
  $this->path = $this->path !== '/' ? rtrim($this->path, '/') : $this->path;
  $this->currentPage = $this->setCurrentPage($currentPage, $this->pageName);
  $this->items = $items instanceof Collection ? $items : Collection::make($items);
 }

以下为具体实现代码:

//控制器中
public function index(LiveService $liveService, Request $request)
 {
  //数据A
  $dataA = User::where('status', 1)->get()->toArray();
  //数据B
  $dataB = User::where('status', 2)->get()->toArray();
  $data = array_merge($dataA, $dataB);
  //当前页数 默认1
  $page = $request->page ?: 1;
  //每页的条数
  $perPage = 4;
  //计算每页分页的初始位置
  $offset = ($page * $perPage) - $perPage;
   //实例化LengthAwarePaginator类,并传入对应的参数
  $data = new LengthAwarePaginator(array_slice($data, $offset, $perPage, true), count($data), $perPage,
   $page, ['path' => $request->url(), 'query' => $request->query()]);
  return view('admin.users.index', compact('data'));
 }

//视图中
{{ $data->links() }}

以上基本就完成了数组分页,大致流程就是控制器获取到当前页数,实例化LengthAwarePaginator类并传入必要的参数,根据每页的条数利用array_slice()方法获取每页要显示的数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
php curl的深入解析
Jun 02 PHP
显示程序执行时间php函数代码
Aug 29 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
PHP基于数组实现的分页函数实例
Aug 20 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
php post换行的方法
Feb 03 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
thinkPHP框架实现生成条形码的方法示例
Jun 06 #PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 #PHP
PHP简单实现记录网站访问量功能示例
Jun 06 #PHP
Laravel框架实现利用监听器进行sql语句记录功能
Jun 06 #PHP
Laravel框架实现利用中间件进行操作日志记录功能
Jun 06 #PHP
PHP实现的curl批量请求操作示例
Jun 06 #PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
Jun 06 #PHP
You might like
又十个超级有用的PHP代码片段
2015/09/24 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
php四种定界符详解
2017/02/16 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
文本加密解密
2006/06/23 Javascript
通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
2011/05/07 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
用jquery实现的一个超级简单的下拉菜单
2014/05/18 Javascript
jquery控制select的text/value值为选中状态
2014/06/03 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
2017/02/05 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python书单 不将就
2017/07/11 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
Python 单例设计模式用法实例分析
2019/09/23 Python
tensorflow之并行读入数据详解
2020/02/05 Python
python调用百度AI接口实现人流量统计
2021/02/03 Python
Hotter Shoes美国官网:英国最受欢迎的舒适鞋
2018/08/02 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
免税水晶:Duty Free Crystal
2019/05/13 全球购物
加强干部作风建设整改方案
2014/10/24 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
坎儿井导游词
2015/02/09 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
mysql事务隔离级别详情
2021/10/24 MySQL
Python超详细分步解析随机漫步
2022/03/17 Python