laravel 分页问题

从接口获取的数据 合并 数据库数据后的数组 如何分页显示

阅读 3.6k
3 个回答

自行手动构建,

想要带 bootstrap 的分页器,new Illuminate\Pagination\LengthAwarePaginator
想要简单的分页器,new Illuminate\Pagination\Paginator

具体的构建,可以参考源代码中 Orm 调用时的实例化分页器,位置在 vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php 中的 paginate 方法

手动创建分页器

有时候你可能想要通过传递数组数据来手动创建分页实例,
你可以基于自己的需求通过创建 Illuminate\Pagination\Paginator 
或 Illuminate\Pagination\LengthAwarePaginator 实例来实现。

Paginator 类不需要知道结果集中数据项的总数;
不过,正因如此,该类也没有提供获取最后一页索引的方法。
LengthAwarePaginator 接收参数和 Paginator 几乎一样,只是,它要求传入结果集的总数。

换句话说,Paginator 对应 simplePaginate 方法,
而LengthAwarePaginator 对应 paginate 方法。

    注:当手动创建分页器实例的时候,应该手动对传递到分页器的结果集进行“切片”,
    如果你不确定怎么做,查看 PHP 函数 array_slice。

---上面来自 laravel 学院手册

use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Pagination\Paginator;
use Illuminate\Http\Request;
# 仅做演示 #
function userList(Request $request) {
  $users = [
    ['username'=>'zhangsan', 'age'=>26],
    ['username'=>'lisi', 'age'=>23],
    ['username'=>'wangwu', 'age'=>62],
    ['username'=>'zhaoliu', 'age'=>46],
    ['username'=>'wangmazi', 'age'=>25],
    ['username'=>'lanzi', 'age'=>24],
    ['username'=>'pangzi', 'age'=>21]
  ];
  $perPage = 3;
  if ($request->has('page')) {
      $current_page = $request->input('page');
      $current_page = $current_page <= 0 ? 1 :$current_page;
  } else {
      $current_page = 1;
  }
  $item = array_slice($users, ($current_page-1)*$perPage, $perPage); //注释1
  $total = count($users);
  $paginator =new LengthAwarePaginator($item, $total, $perPage, $currentPage, [
      'path' => Paginator::resolveCurrentPath(), //注释2
      'pageName' => 'page',
  ]);
  $userlist = $paginator->toArray()['data'];
  return view('userlist', compact('userlist', 'paginator'));
}

---来自百度

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题