您的位置:首页 > 编程语言 > PHP开发

Laravel手动创建分页器

2017-05-05 20:20 537 查看
Laravel手动创建分页器

        laravel自带的分页功能十分强大,只不过,在使用 groupBy 语句的分页操作时,无法由 Laravel 有效执行。如果你需要在一个分页结果集中使用groupBy,建议你查询数据库并手动创建分页器。(基于Laravel5.4,老版本可能需要修改个别地方)

默认分页功能示例代码如下:

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
 
class IndexControllerextends Controller
{
   
    publicfunctionindex()
    {
       
$person = DB::table('person')->paginate(15);
 
       
return view('index.pagTest',['person'=>
$person]);
    }
}

手动创建分页器,代码如下;

<?php

namespace App\Http\Controllers\Index;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Pagination\LengthAwarePaginator;

class IndexController extends Controller
{
    //测试查询数据库并手动创建分页器
    public function paginationTest(Request $request){
        $perPage = 5;
        $page = $request->input("page",1)-1;
        $total = DB::table("person")
                    ->groupBy()
                    ->count();

        $items = DB::table("person")
                    ->groupBy()
                    ->skip($page*$perPage)
                    ->take($perPage)
                    ->get();

        $person = new LengthAwarePaginator($items, $total,$perPage);
        $person->withPath("pagTest");

        return view("index.paginationTest",['person' => $person]);
    }
}

 

讲解:理解LengthAwarePaginator构造函数的前三个参数,就能明白如何手动创建分页器

$person->withPath("pagTest")是设置baseUrl的方法


 

$item             //手动查询到的数据

$total            //所有符合条件的数据总数量

$perPage      //每个页面,数据显示的条数

 

LengthAwarePaginator构造函数,代码如下

/**

 * Create a new paginator instance.

 *

 * @param  mixed $items

 * @param  int $total

 * @param  int $perPage

 * @param  int|null $currentPage

 * @param  array $options (path, query, fragment, pageName)

 * @return void

 */
publicfunction
__construct($items,$total,$perPage,$currentPage=null,array$options=
[])

{

    foreach ($optionsas$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->pageName);

    $this->items=$itemsinstanceofCollection
?$items: Collection::make($items);

}

附上结果图(因为使用了路由,请忽略url的不同:)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: