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

标签 php laravel laravel-4 pagination eloquent

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

$tasks = Tasks::paginate(10); 

然后

$tasks->links();

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

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

更重要的是,我需要查询类似“只获取 100 条记录并将它们按 10 分页”之类的查询,如果它类似于

Tasks::take(100)->paginate(10) 

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

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

最佳答案

拉拉维尔 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 对象,因为它不存储整个任务集合,而只存储当前页面。

拉拉维尔 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 是否对您有用。

关于php - 如何对可用集合进行分页 [Laravel 4.2],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31370532/

相关文章:

php - laravel 加入 : How can I join tables and pull various kinds of data according to my conditions form the same join?

session - Laravel 4 如何在 View 中显示 Flash 消息?

javascript - 如何为 jquery-bootgrid 设置工具提示

javascript - 如何为动态创建的输入框应用自动完成

php - Laravel 查询生成器返回对象还是数组?

php - slim 3 : what is HTTP Cache for?

laravel - 如何在 Laravel 4 中获取 @if 语句(Blade)中的当前 URL?

php - Twitter bootstrap 未在 Laravel 4 中使用 Composer 安装

javascript - 获取用于 PHP 查询的 JQuery UI Slider 的值

php - 如何在 Windows 上安装 Zend OPcache Extension + PHP >= 5.4