Skip to content

分页

配置

在其他框架中,分页可能非常麻烦。Laravel 让它变得轻而易举。Laravel 可以根据当前页面生成一个智能的“范围”链接。生成的 HTML 与 Bootstrap CSS 框架兼容。

用法

有几种方法可以对项目进行分页。最简单的方法是对查询构建器或 Eloquent 模型使用 paginate 方法。

分页数据库结果

php
$users = DB::table('users')->paginate(15);

NOTE

目前,使用 groupBy 语句的分页操作无法由 Laravel 高效执行。如果需要对分页结果集使用 groupBy,建议手动查询数据库并创建分页器。

手动创建分页器

有时您可能希望手动创建分页实例,并传递一个项目数组。您可以通过创建 Illuminate\Pagination\PaginatorIlluminate\Pagination\LengthAwarePaginator 实例来实现这一点,具体取决于您的需求。

分页 Eloquent 模型

您还可以对 Eloquent 模型进行分页:

php
$allUsers = User::paginate(15);

$someUsers = User::where('votes', '>', 100)->paginate(15);

传递给 paginate 方法的参数是您希望每页显示的项目数。检索到结果后,您可以在视图中显示它们,并使用 render 方法创建分页链接:

php
<div class="container">
	<?php foreach ($users as $user): ?>
		<?php echo $user->name; ?>
	<?php endforeach; ?>
</div>

<?php echo $users->render(); ?>

这就是创建分页系统所需的一切!请注意,我们不必通知框架当前页面。Laravel 会自动为您确定这一点。

您还可以通过以下方法访问其他分页信息:

  • currentPage
  • lastPage
  • perPage
  • hasMorePages
  • url
  • nextPageUrl
  • firstItem
  • lastItem
  • total
  • count

“简单分页”

如果您在分页视图中仅显示“下一页”和“上一页”链接,则可以选择使用 simplePaginate 方法执行更高效的查询。这对于不需要在视图中显示确切页码的大型数据集非常有用:

php
$someUsers = User::where('votes', '>', 100)->simplePaginate(15);

自定义分页器 URI

您还可以通过 setPath 方法自定义分页器使用的 URI:

php
$users = User::paginate();

$users->setPath('custom/url');

上面的示例将创建如下 URL:http://example.com/custom/url?page=2

附加到分页链接

您可以使用 Paginator 上的 appends 方法将查询字符串添加到分页链接:

php
<?php echo $users->appends(['sort' => 'votes'])->render(); ?>

这将生成如下 URL:

php
http://example.com/something?page=2&sort=votes

如果您希望将“哈希片段”附加到分页器的 URL,可以使用 fragment 方法:

php
<?php echo $users->fragment('foo')->render(); ?>

此方法调用将生成如下 URL:

php
http://example.com/something?page=2#foo

转换为 JSON

Paginator 类实现了 Illuminate\Contracts\Support\JsonableInterface 合约,并公开了 toJson 方法。您还可以通过从路由返回 Paginator 实例来将其转换为 JSON。实例的 JSON 形式将包括一些“元”信息,如 totalcurrent_pagelast_page。实例的数据将通过 JSON 数组中的 data 键提供。