【问题标题】:Convert this SQL into eloquent ORM将此 SQL 转换为雄辩的 ORM
【发布时间】:2020-07-05 00:06:38
【问题描述】:

我想把下面的sql语句转成eloquent:

select order_number, order_id, sum(quantity) as qty, sum(price) as pr from `orders` right join `order_details` on `orders`.`id` = `order_details`.`order_id` group by `order_number`

我这样做如下:

$order = OrderDetails::select(DB::raw('order_number, order_id, sum(quantity) as qty, sum(price) as pr'))
            ->from('orders')    
            ->rightJoin('order_details', 'orders.id', '=', 'order_details.order_id')
            ->groupBy('order_number')
            ->get();
dd($order);

问题是它正在转换为相同的 sql 但显示错误。错误如下所示: *

Illuminate \ Database \ QueryException (42000)
SQLSTATE[42000]: Syntax error or access violation: 1055 'techvillege.order_details.order_id' isn't in GROUP BY (SQL: select

order_number, order_id, sum(quantity) as qty, sum(price) as pr from orders 右加入 order_detailsorders.id = order_details.order_id group by order_number)

* 这些表是: orders table order_details 我真的不知道这里的确切问题是什么,并且在过去的两天里一直坚持下去。请有人帮助我。提前致谢。

【问题讨论】:

    标签: sql database laravel eloquent subquery


    【解决方案1】:

    它说你需要将order_id 添加到groupBy() 方法

    $order = OrderDetails::select(DB::raw('order_number, order_id, sum(quantity) as qty, sum(price) as pr'))
                ->from('orders')    
                ->rightJoin('order_details', 'orders.id', '=', 'order_details.order_id')
                ->groupBy('order_number', 'order_id')
                ->get();
    

    【讨论】:

    • 完美解决了这个问题,但你能解释一下我为什么要这样做吗?因为我想按 order_number 分组,而不是 order_id
    • 如果你使用聚合函数(COUNT, MAX, MIN, AVG...),select()方法中的所有字段,必须包含在group by
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2017-01-05
    • 1970-01-01
    相关资源
    最近更新 更多