假设我的数据库中有 200 条记录。在显示这些记录时,我想对它们进行分页。正常的方法是做类似的事情
$tasks = Tasks::paginate(10);
然后
$tasks->links();
该代码工作正常。但是,使用该代码,您将在每次获取这 10 行时运行数据库查询(200/10 = 所有行 20 次)。
我需要的是一次获取所有数据,将它们存储在一个集合中(比如 $tasks
),然后对结果集合
进行分页,而不是再次从数据库中获取.
更重要的是,我需要查询类似“只获取 100 条记录并将它们按 10 分页”之类的查询,如果它类似于
Tasks::take(100)->paginate(10)
但不幸的是,即使这样也行不通。
有人知道如何解决这些问题吗?
最佳答案
拉拉维尔 5
$tasks = Tasks::take(100); // fetch 100 tasks
// initialize paginator
$paginator = new \Illuminate\Pagination\Paginator($tasks, 10, $pageNumber);
// get current page of tasks
$currentPage = $paginator->items();
为了获得不同的任务页面,您需要创建新的 Paginator 对象,因为它不存储整个任务集合,而只存储当前页面。
拉拉维尔 4
Laravel 4 中的 Paginator 似乎没有“处理分页”,这意味着它希望您传递的不是所有项目,而是当前页面中的项目。在 L5 中,您可以传递所有项目和当前页面,Paginator 会为您处理一切。
为了在 L4 中使用 Paginator,您需要自己对任务进行切片,然后使用 Paginator facade(内部使用 Illuminate\Pagination\Factory)来创建 Paginator 对象。
use Paginator;
$tasks = Tasks::take(100);
$currentPageTasks = $tasks->slice(($currentPage - 1) * $perPage, $perPage);
Paginator::make($currentPageTasks, $tasks->count(), $perPage);
不过,我不确定以这种方式构建的 Paginator 是否对您有用。
关于php - 如何对可用集合进行分页 [Laravel 4.2],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31370532/