Laravel 的分页

在其他框架中,分页是令人头痛的。Laravel 使它变得轻而易举,它可以通过在 Controller 和 View 中添加几行代码来生成分页。

基本用法

分页项有很多种方法,但最简单的方法是在查询构建器或 Eloquent 查询中使用 paginate 方法。开箱即用的 Laravel 负责根据用户查看的当前页面设置限制和偏移。默认情况下,当前页面由 HTTP 请求的?page query string 参数值检测。当然,Laravel 会自动检测此值并插入由 paginator 生成的链接中。

现在让我们说我们想在查询时调用 paginate 方法。在我们的示例中,paginate 的传递参数是你希望每页显示的项目数。在我们的例子中,假设我们想要每页显示 10 个项目。

<?php

namespace App\Http\Controllers;

use DB;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * Show all of the users for the application.
     *
     * @return Response
     */
    public function index()
    {
        $users = DB::table('users')->paginate(10);

        return view('user.index', ['users' => $users]);
    }
}

注意: 目前,使用 groupBy 语句的分页操作无法由 Laravel 有效执行。如果你需要将 groupBy 与分页结果集一起使用,建议你查询数据库并手动创建分页器。

简单的分页

假设你只想在分页视图中显示下一个上一个链接。Laravel 使用 simplePaginate 方法为你提供此选项。

$users = DB::table('users')->simplePaginate(10);

在视图中显示结果

现在让我们在视图中显示分页。实际上,当你在 Eloquent 查询中调用 paginatesimplePaginate 方法时,你会收到一个 paginator 实例。当调用 paginate 方法时,你会收到 Illuminate\Pagination\LengthAwarePaginator 的实例,而当你调用 simplePaginate 方法时,你会收到 Illuminate\Pagination\Paginator 的实例。这些实例/对象附带了几种解释结果集的方法。此外,除了这些辅助方法之外,paginator 实例还是迭代器,可以作为数组循环。

收到结果后,你可以使用刀片轻松呈现页面链接

<div class="container">
    @foreach ($users as $user)
        {{ $user->name }}
    @endforeach
</div>

{{ $users->links() }}

links 方法将自动呈现指向结果集中其他页面的链接。这些链接中的每一个都将包含特定的页码,即 ?page 查询字符串变量。links 方法生成的 HTML 与 Bootstrap CSS 框架完全兼容