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
php UTF8 文件的签名问题
Oct 30 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
php 文章调用类代码
Aug 11 PHP
使用PHP编写的SVN类
Jul 18 PHP
ThinkPHP模板IF标签用法详解
Jul 01 PHP
php获取文章上一页与下一页的方法
Dec 01 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
PHP实现C#山寨ArrayList的方法
Jul 16 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 PHP
PHP开发的微信现金红包功能示例
Jun 29 PHP
php7中停止php-fpm服务的方法详解
May 09 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实现的四则运算表达式计算实现代码
2011/08/02 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
php实现用户登陆简单实例
2017/04/04 PHP
PHP中rename()函数的妙用讲解
2019/02/28 PHP
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
PHP守护进程实例
2015/03/06 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
解决layer弹层遮罩挡住窗体的问题
2018/08/17 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
django框架防止XSS注入的方法分析
2019/06/21 Python
django表单的Widgets使用详解
2019/07/22 Python
python 实现学生信息管理系统的示例
2020/11/28 Python
如何定义一个可复用的服务
2014/09/30 面试题
应届生体育教师自荐信
2013/10/03 职场文书
后勤自我鉴定
2013/10/13 职场文书
《雾凇》教学反思
2014/02/17 职场文书
行政求职信
2014/07/04 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
2016暑期政治学习心得体会
2016/01/23 职场文书
安全生产协议书
2016/03/22 职场文书
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android