集合分页

创建服务提供者

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
//引入这几个类
use Illuminate\Pagination\Paginator;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;

class CollectionMacroServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
        if (!Collection::hasMacro('paginate')) {
            //注册宏
            Collection::macro('paginate', 
                function ($perPage = 15, $page = null, $options = []) {
                    //获取当前页
                    $page = $page ?: (Paginator::resolveCurrentPage() ?: 1);                    
                    //初始化LengthAwarePaginator
                    return (new LengthAwarePaginator(
                        $this->forPage($page, $perPage), $this->count(), $perPage, $page, $options))
                    ->withPath(''); 
                });
        }
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

在config/app.php的providers数组中加入一行:

App\Providers\CollectionMacroServiceProvider::class,

使用:

collect([1,2,3,4,5,6])->paginate(5);

使用时如果提示 withPath 这个方法未定义,把这个方法删除掉就可以了

集合分页会遇到数据应该是数组,但是返回的是对象,这样来处理,因为集合排序后ID不是从0开始的
以下参考此文章:博客:Laravel 的限制条数再分页

$data = collect($sumData)->sortByDesc('i');
//传入页数,默认值为1
$page = $request->page ?? 1;
//每页的条数
$perPage = $request->input('page_size', 10);
//计算每页分页的初始位置
$offset = ($page * $perPage) - $perPage;
//实例化LengthAwarePaginator类,并传入对应的参数
$data = new LengthAwarePaginator(
    array_values($data->slice($offset, $perPage)->toArray()),  // 对象转数组参考:https://learnku.com/articles/15044
    count($data),
    $perPage,
    $page,
    ['path' => $request->url(), 'query' => $request->query()]
);
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!