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 无限级缓存的类的扩展
Mar 16 PHP
php 变量定义方法
Jun 14 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
PHP IDE phpstorm 常用快捷键
May 18 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
PHP如何解决微信文章图片防盗链
Dec 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实现异步操作的研究
2013/02/03 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
PHP实现判断数组是一维、二维或几维的方法
2017/02/06 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
2019/04/02 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
Prototype PeriodicalExecuter对象 学习
2009/07/19 Javascript
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
jquery easyui使用心得
2014/07/07 Javascript
jQuery插件FusionCharts实现的2D饼状图效果【附demo源码下载】
2017/03/03 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
js实现随机8位验证码
2020/07/24 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
php使用递归与迭代实现快速排序示例
2014/01/23 Python
Python中input和raw_input的一点区别
2014/10/21 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
使用HTML5和CSS3表单验证功能
2017/05/05 HTML / CSS
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
美国轮胎网站:Priority Tire
2018/11/28 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
小学教师评语大全
2014/04/23 职场文书
实习单位鉴定评语
2014/04/26 职场文书
护士年终考核评语
2014/12/31 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
不同意离婚上诉状
2015/05/23 职场文书
安全责任协议书范本
2016/03/23 职场文书
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python