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 相关文章推荐
Discuz! Passport 通行证整合
Mar 27 PHP
php通用防注入程序 推荐
Feb 26 PHP
PHP取整数函数常用的四种方法小结
Jul 05 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
基于PHP常用函数的用法详解
May 10 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 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如何透过ODBC来存取数据库
2006/10/09 PHP
PHP迭代器的内部执行过程详解
2013/11/12 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
jQuery中文入门指南,翻译加实例,jQuery的起点教程
2007/01/13 Javascript
JS简单随机数生成方法
2016/09/05 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
2016/10/28 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
python语言元素知识点详解
2019/05/15 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
Keras搭建自编码器操作
2020/07/03 Python
Django REST Swagger实现指定api参数
2020/07/07 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
node中使用shell脚本的方法步骤
2021/03/23 Javascript
2014年个人业务工作总结
2014/11/17 职场文书
租车协议书范本2014
2014/11/17 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript