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

Laravel在when条件内调用paginate实现动态分页时出现length undefined报错

解决方案

核心问题原因

  • 你将paginate方法放在when条件的闭包内,且未将执行结果返回给外层链式调用。同时如果$request->size参数不存在时,整条查询链最终返回的是查询构造器实例而非标准分页对象,前端接收的数据缺少预期的数组结构/分页字段,就会触发length undefined报错。
  • 额外注意:你当前的搜索逻辑存在SQL逻辑漏洞,所有orWhere条件没有包裹分组,会导致全局的company_id过滤条件失效,最终会查询到其他企业的匹配数据。

修正后代码

$groups = Group::where('company_id', Auth::user()->company_id)
    ->when($request->search, function($query, $term) {
        // 将所有模糊搜索条件包裹在同一层级的where闭包中,避免破坏company_id的全局过滤
        $query->where(function($q) use ($term) {
            $q->where('code', 'LIKE' , '%' . $term . '%')
              ->orWhere('name', 'LIKE' , '%' . $term . '%')
              ->orWhere('description', 'LIKE' , '%' . $term . '%');
        });
    })
    ->when($request->column, function($query, $term) use ($request) {
        $query->orderBy($term, $request->order);
    })
    // paginate放在链式调用最外层,设置默认分页条数保证返回结构统一
    ->paginate($request->input('size', 10));

前端适配注意

如果使用Inertia将分页数据返回给Vue侧,分页对象的列表数据默认存放在data属性下,你需要通过groups.data来遍历列表,不要直接遍历根分页对象,否则也会出现length undefined报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 02:39:02