У меня есть этот простой SQL-запрос:
SELECT product_name, SUM (product_amount)
FROM orders
GROUP BY product_name;
Он покажет список с названиями продуктов и их количеством. Как этот пример:
Я хочу перевести это на Yii2 Query Builder. Я не знаю, как пользоваться функцией SUM
. Я пробовал это, но это не сработало:
Orders::find()
->select(
[
Orders::tableName() . ".product_name",
(new \yii\db\Query())->sum(Orders::tableName() . ".product_amount")
]
)
->groupBy(
[
Orders::tableName() . '.product_name',
Orders::tableName() . '.product_amount'
]
);
Вам нужно использовать yii\db\Expression
при выборе, поскольку вы пытаетесь вызвать функцию SQL SUM()
, и вам нужно, чтобы нет цитировал функцию при выборе.
Expression represents a DB expression that does not need escaping or quoting. Expression objects are mainly created for passing raw SQL expressions to methods of
yii\db\Query
,yii\db\ActiveQuery
and related classes.
Измените свой код на
Orders::find()
->select(['product_name', new \yii\db\Expression('SUM(product_amount)')])
->groupBy('product_name,product_amount')
->all();