繁体   English   中英

如何分页可用收藏[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分页, resulting collection不是再从DB中获取。

更重要的是,我需要查询类似“只获取100条记录并将它们分成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();

为了获得不同的任务页面,您需要创建新的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是否以这种方式构建对你有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM