如何分页可用收藏[Laravel 4.2]

时间:2015-07-12 17:25:32

标签: php laravel laravel-4 pagination eloquent

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

的事情
$tasks = Tasks::paginate(10); 

然后

$tasks->links();

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

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

更重要的是,我需要查询类似"只获得100条记录并将其分页为10"如果它像

那样会很好
Tasks::take(100)->paginate(10) 

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

任何人都知道如何解决这些问题?

1 个答案:

答案 0 :(得分:1)

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

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

Laravel 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是否以这种方式构建对你有用。