drsxzut183207938 2016-12-12 01:00
浏览 98
已采纳

获取JOIN查询中的平均值,在原始MySql中工作但在Laravel查询构建器中不起作用

I got this query written out in Laravel query builder, bu when i run it, it returns this error: Call to a member function join() on float

$avgYield= DairyCropYield::avg('moisture')
            ->join('dairy_crops','dairy_crops.id','=','dairy_crop_yields.dairy_crop_id')
            ->join('dairy_crop_varieties','dairy_crops.dairy_crop_variety_id','=','dairy_crop_varieties.id')
            ->where('dairy_crop_varieties.crop','=',$crop->crop)
            ->whereYear('harvested_at','=',Carbon::now()->year)
            ->get();

But when i write the same query in mySql it wroks as exptected:

SELECT AVG(moisture) FROM dairy_crop_yields AS yield JOIN dairy_crops AS crop ON crop.id = yield.dairy_crop_id JOIN dairy_crop_varieties AS variety ON variety.id = crop.dairy_crop_variety_id WHERE variety.crop = 'corn' AND YEAR(harvested_at) = 2015

Any thoughts / suggestions on what I am not doing right in Laravel query builder. I do want to master and stick with Laravel's query builder. Thanks.

  • 写回答

1条回答 默认 最新

  • douju9272 2016-12-12 03:15
    关注

    Put the avg after the get(), the avg method works on a collection. So what you want is to get() all the result first then only call the avg('moisture') on the available results.

    $avgYield= DairyCropYield::join('dairy_crops','dairy_crops.id','=','dairy_crop_yields.dairy_crop_id')
            ->join('dairy_crop_varieties','dairy_crops.dairy_crop_variety_id','=','dairy_crop_varieties.id')
            ->where('dairy_crop_varieties.crop','=',$crop->crop)
            ->whereYear('harvested_at','=',Carbon::now()->year)
            ->get()
            ->avg('moisture');
    

    Alternately, you can also do something like this using DB::raw

    $avgYield= DairyCropYield::select(DB::raw('AVG(moisture)'))
        ->join('dairy_crops','dairy_crops.id','=','dairy_crop_yields.dairy_crop_id')
        ->join('dairy_crop_varieties','dairy_crops.dairy_crop_variety_id','=','dairy_crop_varieties.id')
        ->where('dairy_crop_varieties.crop','=',$crop->crop)
        ->whereYear('harvested_at','=',Carbon::now()->year)
        ->get();
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集