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的access操作类
Apr 09 PHP
PHP 身份证号验证函数
May 07 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
PHPWind 发帖回帖Api PHP版打包下载
Feb 08 PHP
Php获取金书网的书名的实现代码
Jun 11 PHP
php socket实现的聊天室代码分享
Aug 16 PHP
ThinkPHP中数据操作案例分析
Sep 27 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
php监测数据是否成功插入到Mysql数据库的方法
Nov 25 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
Oct 03 PHP
详解thinkphp的Auth类认证
May 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 作用域解析运算符(::)
2010/07/27 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
基于angularjs实现图片放大镜效果
2016/08/31 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
js实现内置计时器
2019/12/16 Javascript
Vue学习之常用指令实例详解
2020/01/06 Javascript
Python Sleep休眠函数使用简单实例
2015/02/02 Python
用Python编写简单的微博爬虫
2016/03/04 Python
Python端口扫描简单程序
2016/11/10 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
详解Python中的Lock和Rlock
2021/01/26 Python
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
俄罗斯园林植物网上商店:Garshinka
2020/07/16 全球购物
优秀员工自荐书范文
2013/12/08 职场文书
酒店led欢迎词
2014/01/09 职场文书
小学运动会表扬稿
2014/01/19 职场文书
运动会入场词200字
2014/02/15 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
法人委托书
2014/07/31 职场文书
做一个有道德的人活动实施方案
2014/08/23 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
平面设计师岗位职责
2014/09/18 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
现场施工员岗位职责
2015/04/11 职场文书
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL