集合分页
创建服务提供者
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 协议》,转载必须注明作者和本文链接
推荐文章: