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 相关文章推荐
example1.php
Oct 09 PHP
在字符串中把网址改成超级链接
Oct 09 PHP
php去除重复字的实现代码
Sep 16 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
PHPUnit安装及使用示例
Oct 29 PHP
PHP下载文件的函数实例代码
May 18 PHP
php实现文章置顶功能的方法
Oct 20 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 PHP
PHP中ltrim()函数的用法与实例讲解
Mar 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实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
JQuery 常用方法基础教程
2009/02/06 Javascript
jQuery Lightbox 图片展示插件使用说明
2010/04/25 Javascript
js更优雅的兼容
2010/08/12 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
python双向链表实现实例代码
2013/11/21 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
Python设计模式之备忘录模式原理与用法详解
2019/01/15 Python
Python 支付整合开发包的实现
2019/01/23 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
Python中遍历列表的方法总结
2019/06/27 Python
Python3内置模块random随机方法小结
2019/07/13 Python
python加载自定义词典实例
2019/12/06 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
python中常见错误及解决方法
2020/06/21 Python
Python中logging日志记录到文件及自动分割的操作代码
2020/08/05 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
开业主持词
2014/03/21 职场文书
对公司的意见和建议
2015/06/04 职场文书
初一英语教学反思
2016/02/15 职场文书