Laravel query()构造查询调用paginate()提示方法不存在问题求助
问题原因及解决方案
你第一次报错的核心原因是方法调用的对象类型错误:
get()方法会直接执行SQL查询,返回的是Illuminate\Database\Eloquent\Collection集合实例,该实例没有paginate()方法paginate()是查询构造器(Illuminate\Database\Eloquent\Builder)的方法,必须在查询未执行(即还未调用get/first等触发SQL执行的方法)时调用,直接用paginate替代get的位置即可,paginate本身会执行查询并生成分页结果。
正确代码如下:
public function fetchprocedure(Request $search_procedure) { $filter_procedure = $search_procedure->input('search_procedure'); $all_procedures = HmsBbrKnowledgebaseProcedure::query() ->when(is_null($filter_procedure), function ($query) { $query->where('bbr_procedure_id', '>=', 1); }) ->when(!empty($filter_procedure), function ($query) use ($filter_procedure) { $query->where('procedure_name', 'iLIKE', "%$filter_procedure%"); }) ->orderBy('bbr_procedure_id', 'ASC') ->paginate(10); // 此处直接替换原来的get()位置 return response()->json([ 'all_procedures' => $all_procedures, ]); }
如果去掉get()后仍有报错,可按以下方向排查:
- 确认导入的
Request类为Illuminate\Http\Request,没有引错命名空间 - 确认你的Laravel版本在5.0以上,原生支持
paginate方法 - 如果你需要单独操作当前页的数据集,可以调用
$all_procedures->items()获取当前页的模型集合 - 分页实例直接转JSON会自动携带总记录数、当前页码、每页条数、上下页链接等分页元信息,符合常规接口返回规范。
内容的提问来源于stack exchange,提问作者user16409170
相关产品推荐
相关产品推荐

