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 中执行排序与 MySQL 中排序
Apr 21 PHP
PHP扩展编写点滴 技巧收集
Mar 09 PHP
简单的PHP留言本实例代码
May 09 PHP
PHP随机生成随机个数的字母组合示例
Jan 14 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
检测codeigniter脚本消耗内存情况的方法
Mar 21 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
php for 循环使用的简单实例
Jun 02 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
May 08 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
Laravel框架模型的创建及模型对数据操作示例
May 07 PHP
TP5框架实现上传多张图片的方法分析
Mar 29 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 数字左侧自动补0
2008/03/31 PHP
Session保存到数据库的php类分享
2011/10/24 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
PHP new static 和 new self详解
2017/02/19 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
ext for eclipse插件安装方法
2008/04/27 Javascript
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
javascript 面向对象编程基础:封装
2009/08/21 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
js性能优化技巧
2015/11/29 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
python 文件转成16进制数组的实例
2018/07/09 Python
详解python解压压缩包的五种方法
2019/07/05 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
django实现日志按日期分割
2020/05/21 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
结婚典礼证婚词
2014/01/11 职场文书
新护士岗前培训制度
2014/02/02 职场文书
学校校庆演讲稿
2014/05/22 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
五一促销活动总结
2014/07/01 职场文书
优秀教师事迹材料
2014/12/15 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书