如何对可用集合进行分页 [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 是否对您有用。
假设我的数据库中有 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 是否对您有用。