关于laravel 得手动分页问题
2018-06-22 05:22:53来源:未知 阅读 ()
一般得分页,我们只需要使用paginate方法,就可以简单得搞定。但是遇到数组得组合情况呢?或者,独立效果呢。这个时候,就需要我们使用自定义分页了。
例:
假定分页得数组为:
[ { "id": 9, "sys_id": 1, "org_id": 2, "user_id": 8, "papaer_id": 26, }, { "id": 5, "sys_id": 1, "org_id": 2, "user_id": 8, "papaer_id": 26, }, { "id": 1, "sys_id": 1, "org_id": 2, "user_id": 8, "papaer_id": 26, } ]
这里一共3条数据,我们设定每页显示1个,一共3页。
首先我们看下laravel得分页方法源码:
#vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:480 public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null) { $query = $this->toBase(); $total = $query->getCountForPagination(); $this->forPage( $page = $page ?: Paginator::resolveCurrentPage($pageName), $perPage = $perPage ?: $this->model->getPerPage() ); return new LengthAwarePaginator($this->get($columns), $total, $perPage, $page, [ 'path' => Paginator::resolveCurrentPath(), 'pageName' => $pageName, ]); }
我们发现这个关键就是用了lengthAwarePaginator
LengthAwarePaginator的构造方法,如下:
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 = (int) ceil($total / $perPage); $this->path = $this->path != '/' ? rtrim($this->path, '/') : $this->path; $this->currentPage = $this->setCurrentPage($currentPage, $this->lastPage); $this->items = $items instanceof Collection ? $items : Collection::make($items); }
控制器中,分页方法调用:
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\Paginator; public function show(Request $request){
$real = DB::table('blog')->where('uid',$uid)->select(); // 假设查出的数据
$perPage = 1; // 每页显示数量 if ($request->has('page')) { // 请求是第几页,如果没有传page数据,则默认为1 $current_page = $request->input('page'); $current_page = $current_page <= 0 ? 1 :$current_page; } else { $current_page = 1; }
$item = array_slice($real, ($current_page-1)*$perPage, $perPage); // 注释1 $total = count($real); // 查询总数 $paginator =new LengthAwarePaginator($item, $total, $perPage, $current_page, [ 'path' => Paginator::resolveCurrentPath(), // 注释2 'pageName' => 'page', ]);
return response()->json(['result'=>$paginator]) }
注释1:上面的代码中的重点是$item,得出的是所有7条数据。(设定每页显示数量)
注释2:就是设定个要分页的url地址。也可以手动通过 $paginator ->setPath(‘路径’) 设置。
页面中的分页连接也是同样的调用方式 {{ $paginator->render() }}。
注:返回得数据格式大概如下所示:
"result": { "current_page": 3, "data": [ { "id": 5, "sys_id": 1, "org_id": 2, "user_id": 8, "papaer_id": 26 } ], "from": null, "last_page": 2, "next_page_url": null, "path": "http://www.text.tld/examination/show", "per_page": 2, "prev_page_url": "http://www.text.tld/examination/show?page=2", "to": null, "total": 3 }
如果,这篇文章帮到了你,欢迎点击推荐。有疑问,请评论。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- laravel实现批量更新多条记录的方法示例 2020-02-19
- Laravel中七个非常有用但很少人知道的Carbon方法 2020-02-15
- Laravel如何使用数据库事务及捕获事务失败后的异常详解 2020-02-08
- Laravel 中 “规范” 的开发短信验证码发送功能 2020-02-08
- Laravel中获取路由参数Route Parameters的五种方法示例 2020-02-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash