Skip to content

数据库:分页

简介

在其他框架中,分页可能非常痛苦。我们希望 Laravel 的分页方法能让你耳目一新。Laravel 的分页器与查询构建器Eloquent ORM 集成,并提供了方便、易于使用的数据库记录分页功能,无需任何配置。

默认情况下,分页器生成的 HTML 与 Tailwind CSS 框架兼容;但是,Bootstrap 分页支持也可用。

Tailwind

如果你使用 Laravel 的默认 Tailwind 分页视图与 Tailwind 4.x,你的应用程序的 resources/css/app.css 文件将已经正确配置为 @source Laravel 的分页视图:

css
@import 'tailwindcss';

@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php';

基本用法

分页查询构建器结果

有几种方法可以分页项目。最简单的方法是在查询构建器Eloquent 查询上使用 paginate 方法。paginate 方法根据用户当前查看的页面自动处理设置查询的「limit」和「offset」。默认情况下,当前页面由 HTTP 请求上的 page 查询字符串参数的值检测。此值由 Laravel 自动检测,并自动插入到分页器生成的链接中。

在此示例中,传递给 paginate 方法的唯一参数是你希望「每页」显示的项目数。在这种情况下,让我们指定我们希望每页显示 15 个项目:

php
<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use Illuminate\View\View;

class UserController extends Controller
{
    /**
     * 显示所有应用程序用户。
     */
    public function index(): View
    {
        return view('user.index', [
            'users' => DB::table('users')->paginate(15)
        ]);
    }
}

简单分页

paginate 方法在从数据库检索记录之前计算查询匹配的记录总数。这样做是为了让分页器知道总共有多少页记录。但是,如果你不计划在应用程序的 UI 中显示总页数,那么记录计数查询是不必要的。

因此,如果你只需要在应用程序的 UI 中显示简单的「下一页」和「上一页」链接,可以使用 simplePaginate 方法执行单个、高效的查询:

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

分页 Eloquent 结果

你也可以分页 Eloquent 查询。在此示例中,我们将分页 App\Models\User 模型并指示我们计划每页显示 15 条记录。如你所见,语法与分页查询构建器结果几乎相同:

php
use App\Models\User;

$users = User::paginate(15);

当然,你可以在查询上设置其他约束后调用 paginate 方法,例如 where 子句:

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

你也可以在分页 Eloquent 模型时使用 simplePaginate 方法:

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