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

Laravel 8分页点击页面返回整数报错问题排查

Laravel 8分页自定义参数后返回整数报错的原因

问题场景

在Laravel 8中实现表格分页功能时,自定义分页参数名称后,点击下一页出现错误:Invalid Foreach / Call to a member function links() on int。调试发现点击分页后返回值为整数(如点击第2页返回1)。为实现动态化,修改了框架核心Builder文件中paginate方法的$pageName默认值为null,相关代码如下:

修改后的Builder代码

// 原始代码
public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null)

// 修改后代码
public function paginate($perPage = null, $columns = ['*'], $pageName = null, $page = null)

Controller中的分页调用代码

$sales = Sale::where('company_id', Auth::user()->company_id)
            ->whereBetween('date_delivered', [$this->start_date, $this->end_date])
            ->where('level_id',4)
            ->search(trim($this->search))
            ->orderBy($this->column, $this->order)
            ->paginate($this->size,['*'],'sales');

原因分析

  1. 核心文件修改破坏框架逻辑:Laravel的Builder::paginate方法默认$pageName参数为'page',这个参数用于框架内部识别请求中的分页参数、生成分页链接。你将默认值改为null后,框架在处理分页时无法正确解析当前页码、构建分页实例,最终导致paginate方法没有返回预期的LengthAwarePaginator对象,而是意外返回了整数(大概率是查询结果的计数)。

  2. 自定义分页参数无需修改核心文件:Laravel原生就支持在调用paginate时传入自定义$pageName,你Controller中的写法->paginate($this->size, ['*'], 'sales')本身是完全正确的,根本不需要修改框架核心代码。修改核心文件不仅没必要,还会引发兼容性问题,后续框架升级时你的修改会被覆盖,同时导致内部逻辑混乱。

解决方法

  • 立即恢复Builder文件中paginate方法的原始代码,不要修改任何Laravel核心文件。
  • 保持Controller中的分页调用代码不变,Laravel会自动识别你传入的sales作为分页参数名,正常生成分页链接并处理分页请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:45:34