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 相关文章推荐
通过html表格发电子邮件
Oct 09 PHP
dede全站URL静态化改造[070414更正]
Apr 17 PHP
开源SNS系统-ThinkSNS
May 18 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
PHP中的一些常用函数收集
May 26 PHP
php如何获取文件的扩展名
Oct 28 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
Feb 16 PHP
基于PHP实现数据分页显示功能
May 26 PHP
PHP类型约束用法示例
Sep 28 PHP
详解PHP如何更好的利用PHPstorm的自动提示
Aug 18 PHP
PHP数组基本用法与知识点总结
Jun 02 PHP
php 获取音视频时长,PHP 利用getid3 获取音频文件时长等数据
Apr 01 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获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
Linux中为php配置伪静态
2014/12/17 PHP
PHP实现数据分页显示的简单实例
2016/05/26 PHP
php array_keys 返回数组的键名
2016/10/25 PHP
php实现留言板功能
2017/03/05 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
2019/01/17 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
2019/10/16 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
jquery maxlength使用说明
2011/09/09 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
echarts.js 动态生成多个图表 使用vue封装组件操作
2020/07/19 Javascript
python下setuptools的安装详解及No module named setuptools的解决方法
2017/07/06 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
2019/04/29 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
python传到前端的数据,双引号被转义的问题
2020/04/03 Python
Python离线安装各种库及pip的方法
2020/11/28 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
IE9下html5初试小刀
2010/09/21 HTML / CSS
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
展览会邀请函
2015/02/02 职场文书
导游词之山东红叶谷
2019/10/31 职场文书