Yii2 如何将 SUM SQL 函数转换为查询生成器?

Yii2 How to translate SUM SQL function to Query Builder?

我有这个简单的 SQL 查询:

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

它将显示一个包含产品名称及其数量的列表。像这个例子:

我想将它翻译成 Yii2 查询生成器。我不知道如何使用 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() 函数并且您需要 not 来引用选择时的功能。

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();