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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:27:04