如何对可用集合进行分页 [Laravel 4.2]

How to Paginate Available Collection [Laravel 4.2]

假设我的数据库中有 200 条记录。在显示这些记录时,我想对它们进行分页。正常的方法是做类似

$tasks = Tasks::paginate(10); 

然后

$tasks->links();

该代码工作正常。但是,使用该代码,每次获取这 10 行时,您将 运行 数据库查询(所有行 200/10= 20 次)。

我需要的是一次获取所有数据,将它们存储在一个集合中(比如 $tasks),然后分页 resulting collection 而不是再次从数据库中获取。

更重要的是,我需要查询像 "Get only 100 records and paginate them by 10 " 这样的东西,如果像

这样的东西就好了
Tasks::take(100)->paginate(10) 

但不幸的是,即使这样也行不通。

有人知道如何解决这些问题吗?

Laravel 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();

为了获得不同的任务页面,您需要创建新的分页器对象,因为它不存储整个任务集合,而只存储当前页面。

Laravel 4

Laravel 4 中的 Paginator 似乎没有 "handle the pagination",这意味着它希望您传递的不是所有项目,而是当前页面中的项目。在 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 是否对您有用。