码迷,mamicode.com
首页 > 其他好文 > 详细

Laravel —— 特殊分页

时间:2019-10-02 14:49:05      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:return   方法   pre   source   VID   sources   color   附加   min   

项目中,分页经常会用到。

Laravel 中也自带了分页功能。

但有些时候需要稍作修改,来满足自己的需求。

 

一、普通分页

1、控制器中,用 paginate() 方法。

  $users = DB::table(‘users‘)->paginate(15);

  或简单分页

  $users = DB::table(‘users‘)->simplePaginate(15);

2、blade 模板中,可直接用查询结果数据

  {{ $users->links() }}、{$users->render(}}

  分页自带了 bootstamp 样式

3、自定义分页 URI

  $users->withPath(‘custom/url‘);

4、附加参数到分页

  $users->appends([‘sort‘ => ‘votes‘])->links()

 

二、自定义分页

1、自定义分页模板

  php artisan vendor:publish --tag=laravel-pagination

  会在 resources/views 目录下自动创建 pagination/ 目录

  会把自带分页中的模板 copy 在以上目录中。

2、修改模板

  比如修改显示链接数,分页内容等。

3、调用自定义模板

  $paginator->links(‘view.name‘)

  links 参数为模板路径

 

三、集合中的分页

  很多时候查询结果需要用 Collection 处理后再分页,而 Laravel 中是不支持的。

  下面稍作修改,来实现上面的需求

1、集合处理查询结果

 

$users = DB::table(‘users‘)
            ->get()
            ->each(function($item, $key){
                $item->total = 11;
            })->paginate(15);

  

  经过上面的处理后,会发现分页消失了。

2、分页加入服务提供者中

  在 app/Providers/AppServiceProvider.php 文件,

  头部引入下面类

 

use Illuminate\Pagination\Paginator;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;

  

  boot 方法中添加以下代码

  

if (!Collection::hasMacro(‘paginate‘)) {
            Collection::macro(‘paginate‘, 
                function ($perPage = 15, $page = null, $options = []) {
                    $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
                    return (new LengthAwarePaginator(
                        $this->forPage($page, $perPage), $this->count(), $perPage, $page, $options))
                    ->withPath(‘‘);
                });
        }

 

再去测试,发现分页又回来了。

 

Laravel —— 特殊分页

标签:return   方法   pre   source   VID   sources   color   附加   min   

原文地址:https://www.cnblogs.com/rendd/p/11617348.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!