Yii2 Как перевести функцию SUM SQL в Query Builder? - PullRequest
0 голосов
/ 31 октября 2018

У меня есть этот простой запрос 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'
        ]
    );

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вам нужно использовать yii\db\Expression при выборе, когда вы пытаетесь вызвать функцию SQL SUM(), и вам нужно не , чтобы заключить в кавычки функцию при выборе.

Выражение представляет собой выражение БД, которое делает не нужно убегать или цитировать. Объекты выражений в основном создаются для передачи необработанных выражений SQL в методы yii\db\Query, yii\db\ActiveQuery и связанных классов.

Измените свой код на

Orders::find()
    ->select(['product_name', new \yii\db\Expression('SUM(product_amount)')])
    ->groupBy('product_name,product_amount')
    ->all();
0 голосов
/ 31 октября 2018

Попробуйте этот код:

$result = Orders::find()
    ->select(['product_name', 'SUM(product_amount) AS amt'])
    ->groupBy(['product_name'])
    ->all();
...