Преобразуйте это SQL в красноречивый ORM - PullRequest
0 голосов
/ 24 марта 2020

Я хочу преобразовать следующий оператор 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

номер_оказа, номер_оказа, сумма (количество) как кол-во, сумма (цена) как pr от orders правое соединение order_details на orders. id = order_details. order_id группировка по order_number)

* Таблицы: таблица заказов order_details Я действительно не знать, в чем именно заключается проблема, и придерживаться ее в течение последних двух дней. Пожалуйста, кто-нибудь, помогите мне. Заранее спасибо.

1 Ответ

0 голосов
/ 24 марта 2020

говорит, что вам нужно добавить 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();
...