PHP 8 中 Eloquent 分页与之前版本基本一致,只需确保模型正确继承 Model、数据库连接正常,paginate() 方法可直接使用;支持自定义参数名、追加查询参数及 Blade 渲染,注意 PHP 8 对空值更严格。

PHP 8 中使用 Eloquent 进行分页查询和之前版本基本一致,但需注意 PHP 8 的类型声明、错误处理更严格,且 Laravel 9+(常搭配 PHP 8 使用)默认要求模型启用严格模式。只要模型配置正确、数据库连接正常,paginate() 方法可直接使用,无需额外适配 PHP 8。
确保模型和查询基础可用
确认你的 Eloquent 模型已正确声明,并继承 Illuminate\Database\Eloquent\Model。例如:
```php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
// 可选:显式指定表名(若不符合约定)
protected $table = 'posts';
}
```
同时检查 config/database.php 中默认连接是否正常,且数据库驱动支持 LIMIT/OFFSET(如 MySQL、PostgreSQL、SQLite 均支持)。
基础分页写法(推荐用 paginate())
在控制器中直接调用 paginate(),它会自动读取 $_GET['page'] 参数、计算偏移量、返回带分页元数据的 LengthAwarePaginator 实例:
立即学习“PHP免费学习笔记(深入)”;
```php
use App\Models\Post;
// 获取每页 10 条,当前页由 ?page=2 等参数决定
$posts = Post::where('status', 'published')
->orderBy('created_at', 'desc')
->paginate(10);
```
该方法在 PHP 8 下完全兼容,Laravel 9+ 默认返回严格类型化结果,无需手动 cast。
自定义分页参数与 URL
可通过链式方法调整分页行为:
-
指定 page 参数名:用
->paginate(15, ['*'], 'page_name')替换默认page键(如用于多分页区域) -
添加查询参数到分页链接:用
->appends(['search' => $keyword])保留搜索条件 -
跳过自动 page 参数读取:用
->forPage($page, $perPage)手动控制(不推荐常规场景)
示例:
```php
$posts = Post::where('title', 'like', "%{$keyword}%")
->paginate(12)
->appends(['q' => $keyword]); // 生成 ?page=2&q=xxx
```
在 Blade 模板中渲染分页
直接使用内置的 Bootstrap 或 Tailwind 风格分页器(Laravel 自带):
```blade
{{ $posts->links() }}
```
如需自定义 HTML,可遍历 $posts->onEachSide(2) + $posts->links('pagination::tailwind') 指定视图。注意:PHP 8 对空数组/未定义键更敏感,确保模板中先判断 $posts->count() > 0 再渲染列表。



















