Yii2 как перевести функцию sum sql в query builder?

У меня есть этот простой SQL-запрос:

SELECT product_name, SUM (product_amount) 
FROM orders
GROUP BY product_name;

Он покажет список с названиями продуктов и их количеством. Как этот пример:

SQL query result

Я хочу перевести это на 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'
        ]
    );
1
0
269
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно использовать 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();

Другие вопросы по теме