Laravel查询构造器调用paginate后调用withQueryString提示方法不存在
报错原因分析
Method Illuminate\Database\Eloquent\Collection::withQueryString does not exist.
该报错的核心逻辑是:withQueryString() 是 Laravel 分页器类专属的方法,仅 Illuminate\Pagination 命名空间下的分页实例可以调用,你当前代码中的 $modeller 实际为 Eloquent 集合实例,集合类没有定义该方法,因此触发调用错误。
解决方案
- 确认控制器最终输出的是分页实例
你贴出的控制器代码中,最终执行$modeller = $modeller->paginate(18);逻辑是正确的,正常流程下会返回分页实例。需要排查是否有分支逻辑提前调用了get()、all()等方法,将$modeller覆盖为集合实例,调整分支逻辑保证最终赋值给$modeller的是paginate()方法的返回值即可。 - 低版本 Laravel 兼容处理
withQueryString()是 Laravel 7.x 版本才新增的分页方法,如果你的项目 Laravel 版本低于 7,可以直接用功能完全等价的appends()方法替代,Blade 模板代码修改为:
<div class="float-right">{{ $modeller->appends(request()->query())->links()}}</div>
- 排查视图变量修改逻辑
检查 Blade 模板中调用分页方法的代码前,是否对$modeller执行过filter()、map()等返回集合的操作,如果有这类操作,建议提前渲染分页链接,或者单独保留原始分页实例不做集合处理,避免分页实例被覆盖为集合。
内容的提问来源于stack exchange,提问作者onur
相关产品推荐
相关产品推荐

