分页
配置
在其他框架中,分页可能非常麻烦。Laravel 让它变得轻而易举。Laravel 可以根据当前页面生成一个智能的“范围”链接。生成的 HTML 与 Bootstrap CSS 框架兼容。
用法
有几种方法可以对项目进行分页。最简单的方法是对查询构建器或 Eloquent 模型使用 paginate
方法。
分页数据库结果
$users = DB::table('users')->paginate(15);
NOTE
目前,使用 groupBy
语句的分页操作无法由 Laravel 高效执行。如果需要对分页结果集使用 groupBy
,建议手动查询数据库并创建分页器。
手动创建分页器
有时您可能希望手动创建分页实例,并传递一个项目数组。您可以通过创建 Illuminate\Pagination\Paginator
或 Illuminate\Pagination\LengthAwarePaginator
实例来实现这一点,具体取决于您的需求。
分页 Eloquent 模型
您还可以对 Eloquent 模型进行分页:
$allUsers = User::paginate(15);
$someUsers = User::where('votes', '>', 100)->paginate(15);
传递给 paginate
方法的参数是您希望每页显示的项目数。检索到结果后,您可以在视图中显示它们,并使用 render
方法创建分页链接:
<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
方法执行更高效的查询。这对于不需要在视图中显示确切页码的大型数据集非常有用:
$someUsers = User::where('votes', '>', 100)->simplePaginate(15);
自定义分页器 URI
您还可以通过 setPath
方法自定义分页器使用的 URI:
$users = User::paginate();
$users->setPath('custom/url');
上面的示例将创建如下 URL:http://example.com/custom/url?page=2
附加到分页链接
您可以使用 Paginator 上的 appends
方法将查询字符串添加到分页链接:
<?php echo $users->appends(['sort' => 'votes'])->render(); ?>
这将生成如下 URL:
http://example.com/something?page=2&sort=votes
如果您希望将“哈希片段”附加到分页器的 URL,可以使用 fragment
方法:
<?php echo $users->fragment('foo')->render(); ?>
此方法调用将生成如下 URL:
http://example.com/something?page=2#foo
转换为 JSON
Paginator
类实现了 Illuminate\Contracts\Support\JsonableInterface
合约,并公开了 toJson
方法。您还可以通过从路由返回 Paginator
实例来将其转换为 JSON。实例的 JSON 形式将包括一些“元”信息,如 total
、current_page
和 last_page
。实例的数据将通过 JSON 数组中的 data
键提供。