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 相关文章推荐
一个简单的自动发送邮件系统(三)
Oct 09 PHP
木翼下载系统中说明的PHP安全配置方法
Jun 16 PHP
php实现首页链接查询 友情链接检查的代码
Jan 05 PHP
PHP中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
将php数组输出html表格的方法
Feb 24 PHP
yii2.0实现验证用户名与邮箱功能
Dec 22 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
Feb 03 PHP
php 基础函数
Feb 10 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
php实现对短信验证码发送次数的限制实例讲解
Mar 04 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
yii操作cookie实例简介
2014/07/09 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
js+cookies实现悬浮购物车的方法
2015/05/25 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
js实现的Easy Tabs选项卡用法实例
2015/09/06 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
Vue Cli3 打包配置并自动忽略console.log语句的方法
2020/04/23 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
python安装numpy&安装matplotlib& scipy的教程
2017/11/02 Python
Python数据结构之图的应用示例
2018/05/11 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
pytorch 模型可视化的例子
2019/08/17 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
欧洲最大的高尔夫零售商:American Golf
2019/09/02 全球购物
十岁生日同学答谢词
2014/01/19 职场文书
《去年的树》教学反思
2014/04/11 职场文书
法院授权委托书范文
2014/08/02 职场文书
2015年科研工作总结范文
2015/05/13 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
离职告别感言
2015/08/04 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书