Laravel —— 特殊分页

Posted rendd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel —— 特殊分页相关的知识,希望对你有一定的参考价值。

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

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 —— 特殊分页的主要内容,如果未能解决你的问题,请参考以下文章

laravel的分页系统,怎么获取他的total

laravel5自定义分页

laravel 分页小技巧(不使用laravel自带的分页情况下)

Laravel分页

Laravel分页

[ Laravel 5.5 文档 ] 数据库操作 —— 在 Laravel 中轻松实现分页功能