假设我的数据库中有200条记录。在显示那些我希望对它们进行分页的记录时。正常的方法是做类似
的事情$tasks = Tasks::paginate(10);
然后
$tasks->links();
该代码工作正常。但是,使用该代码,每次获取这10行时(200/10 =所有行的20次),您将运行数据库查询。
我需要的是一次获取所有数据,将它们存储在一个集合中(比如说$tasks
),然后对resulting collection
进行分页,而不是再从DB中获取。
更重要的是,我需要查询类似"只获得100条记录并将其分页为10"如果它像
那样会很好Tasks::take(100)->paginate(10)
但不幸的是,即使这样也行不通。
任何人都知道如何解决这些问题?
答案 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是否以这种方式构建对你有用。