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新手上路(五)
Oct 09 PHP
GBK的页面输出JSON格式的php函数
Feb 16 PHP
php中OR与|| AND与&&的区别总结
Oct 26 PHP
php设置允许大文件上传示例代码
Mar 10 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
php通过隐藏表单控件获取到前两个页面的url
Sep 09 PHP
详解WordPress开发中get_header()获取头部函数的用法
Jan 08 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
PHP实现多图上传(结合uploadify插件)思路分析
Nov 30 PHP
Zend Framework常用校验器详解
Dec 09 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 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代码
2010/02/16 PHP
PHP使用DES进行加密与解密的方法详解
2013/06/06 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
js 获取、清空input type="file"的值(示例代码)
2013/12/24 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
2020/11/16 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
详解Python中的from..import绝对导入语句
2016/06/21 Python
python中的格式化输出用法总结
2016/07/28 Python
详解【python】str与json类型转换
2019/04/29 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
Python猴子补丁知识点总结
2020/01/05 Python
美国领先的眼镜和太阳镜在线零售商:Glasses.com
2019/08/26 全球购物
Unineed中文官网:高端护肤美妆与时尚配饰,英国直邮
2020/07/23 全球购物
管道维修工岗位职责
2013/12/27 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
销售员态度差检讨书
2014/10/26 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python
基于redis+lua进行限流的方法
2022/07/23 Redis