原生SQL转Laravel Eloquent带sum求和函数不生效问题咨询
错误原因
- Laravel 查询构造器的
sum()是终止性执行方法,调用后会直接返回求和的数值结果,无法继续链式调用后续的get()方法,也不会将求和结果作为查询的字段返回 - 你没有将sum求和逻辑作为查询字段加入select配置,和原生SQL的查询逻辑不匹配
正确转换写法
DB::table('carts') ->join('products', 'carts.productid', '=', 'products.id') ->select( DB::raw('SUM(carts.quantity) as couuntq'), 'carts.productid', 'products.name', 'products.price', 'products.gallary' ) ->where('carts.userid', $userid) ->groupBy('carts.productid') ->orderBy('carts.productid') ->get();
补充说明
- 原生SQL中重复查询
products.name两次属于冗余,我已删除重复字段,如有特殊业务需要可以自行加回 - 如果你使用Laravel 5.3及以上版本,运行时出现group by相关报错,是因为Laravel默认开启了严格模式SQL校验,需要把select中所有非聚合字段都加入groupBy配置,调整如下:
->groupBy('carts.productid', 'products.name', 'products.price', 'products.gallary')
内容的提问来源于stack exchange,提问作者sachin thakur
相关产品推荐
相关产品推荐

