You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel无模型分页:Blade模板中{{$items->links()}}无法正常使用

嘿,我之前也踩过Laravel手动分页的坑!你的问题主要出在分页类的参数顺序错了,而且没有正确配置分页的请求路径和当前页码,导致Blade里的{{$items->links()}}无法生成正确的链接。

先理清楚核心问题:

你现在用的Paginator类,构造参数顺序是:$items(当前页数据)、$perPage(每页条数)、$currentPage(当前页码,可选)、$options(配置数组)。但你的代码里把总记录数当成了perPage,把10当成了currentPage,这完全搞反了!而且你需要的是带总页数的完整分页,其实更适合用LengthAwarePaginator(它支持显示所有页码、总页数)。

正确的实现步骤:

1. 控制器里正确构建分页实例

首先,我们需要先计算当前页码、截取当前页的数据,再创建分页对象:

use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;

// 假设$risultati是你的完整数据集合(比如Collection实例)
$risultati = ...;

// 配置分页参数
$perPage = 10; // 每页显示10条
$currentPage = request()->get('page', 1); // 从请求中获取当前页码,默认1
$offset = ($currentPage - 1) * $perPage; // 计算数据偏移量

// 截取当前页的数据
$currentPageItems = $risultati->slice($offset, $perPage);

// 创建LengthAwarePaginator实例
$paginator = new LengthAwarePaginator(
    $currentPageItems,
    $risultati->count(), // 总记录数
    $perPage,
    $currentPage,
    [
        'path' => request()->url(), // 设置分页链接的基础路径
        'query' => request()->query(), // 保留请求中的查询参数(比如搜索关键词)
    ]
);

2. 传递分页对象到视图

把分页对象传给Blade视图:

return view('你的视图名称', ['items' => $paginator]);

3. Blade模板中调用分页链接

现在你就可以正常使用{{$items->links()}}了,Laravel会自动生成完整的分页导航,包括页码、上一页/下一页按钮,而且链接会自动带上page参数和其他查询参数。

如果你确实想用简单分页(Paginator类)

如果只需要上一页/下一页的简单分页,也可以用Paginator,但同样要修正参数顺序并配置路径:

use Illuminate\Pagination\Paginator;

$paginator = new Paginator(
    $currentPageItems,
    $perPage,
    $currentPage,
    [
        'path' => request()->url(),
        'query' => request()->query(),
    ]
);

不过这种情况下links()只会显示上一页和下一页按钮,不会显示具体页码。

为什么之前的代码不生效?

  1. 参数顺序错误:你把总记录数传给了perPage参数,导致每页显示所有数据,分页失去意义;
  2. 没有配置path:分页视图不知道该生成哪个路径的分页链接,所以无法正确渲染;
  3. 未正确设置当前页码:默认会用1,但如果用户点击分页链接,页码参数无法被正确识别。

这样调整后,你的分页应该就能正常工作啦!

内容的提问来源于stack exchange,提问作者JahStation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:21:50