Laravel调用Collection::orderBy方法报不存在错误如何解决?
报错原因
orderBy() 是 Eloquent 查询构造器提供的方法,你在代码中先调用了get()方法,此时已经执行SQL返回了Illuminate\Database\Eloquent\Collection集合对象,集合类本身没有orderBy方法,因此抛出方法不存在的异常。
修复方案
根据你的排序需求,可选择以下两种实现方式:
- 方式1:预加载阶段对关联
statements数据排序(性能最优,推荐)
在预加载关联时通过闭包直接对关联数据做SQL层面的排序,代码如下:public function getCardStatements(Request $request){ if($request->id){ $cardStatements = Card::with(['statements' => function($query) { // 直接对关联的statements表数据排序 $query->orderBy('registration_date', 'asc'); }])->where('id', $request->id)->get(); return response()->json($cardStatements); } return response()->json(['return' => false]); } - 方式2:集合阶段使用
sortBy方法排序
如果你需要在拿到全量数据后再做排序,可调用集合提供的sortBy方法实现:public function getCardStatements(Request $request){ if($request->id){ $cardStatements = Card::with('statements')->where('id', $request->id)->get(); // 集合使用sortBy方法,支持点语法读取关联字段 $sortedData = $cardStatements->sortBy('statements.registration_date'); return response()->json($sortedData); } return response()->json(['return' => false]); }
优化提示:你当前通过
where('id', $request->id)->get()查询的是单条ID匹配的卡片数据,可将get()替换为first()直接返回卡片模型对象,避免返回结果嵌套一层无意义的集合结构。
内容的提问来源于stack exchange,提问作者Erialdo D. Freitas
相关产品推荐
相关产品推荐

