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伪造referer突破网盘禁止外连的代码
Jun 15 PHP
PHP DataGrid 实现代码
Aug 12 PHP
php程序效率优化的一些策略小结
Jul 17 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
Feb 01 PHP
自定义php类(查找/修改)xml文档
Mar 26 PHP
领悟php接口中interface存在的意义
Jun 27 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 PHP
php在数据库抽象层简单使用PDO的方法
Nov 03 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
php compact 通过变量创建数组
Nov 15 PHP
Laravel如何实现自动加载类
Oct 14 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中session_unset与session_destroy的区别分析
2011/06/16 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
Javascript之文件操作
2007/03/07 Javascript
分享27款非常棒的jQuery 表单插件
2011/03/28 Javascript
javascript中的void运算符语法及使用介绍
2013/03/10 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
Bootstrap源码解读导航条(7)
2016/12/23 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
2017/04/07 jQuery
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
python多线程之事件Event的使用详解
2018/04/27 Python
Python字符串对象实现原理详解
2019/07/01 Python
解决Python中回文数和质数的问题
2019/11/24 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
中级会计职业生涯规划范文
2014/01/16 职场文书
新闻学专业个人求职信写作
2014/02/04 职场文书
楼面经理岗位职责范本
2014/02/18 职场文书
2015国庆节66周年标语
2015/07/30 职场文书
《绝招》教学反思
2016/02/20 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers