以下是我的纯SQL查询。
SELECT SUM(money) AS total_money, user_id
FROM User
INNER JOIN Person
ON Person.user_id = User.user_id
GROUP BY user_id
如何在Yii框架2中将此纯查询转换为ActiveRecord?我可以解决INNER JOIN
,但不知道如何使用Yii 2 ActiveRecord解析SUM
GROUP BY
答案 0 :(得分:2)
SELECT
部分:
use yii\db\Expression;
...
->select([new Expression('SUM(money) as total_money'), 'user_id'])
GROUP BY
部分:
->groupBy('user_id')
select()和groupBy()的文档可以在Query Builder部分找到。
yii\db\Expression用于阻止引用。
您不能在此处使用sum()方法,因为它的聚合方法会返回一个数字,而在您的情况下,您可以将其与其他列一起使用以返回一组记录。
整个查询将如下所示:
$personTable = Person::tableName();
$userTable = User::tableName();
$users = User::find()
->select([new Expression('SUM(money) as total_money'), 'user_id'])
->innerJoin($personTable, "$personTable.user_id = $userTable.user_id")
->groupBy('user_id')
->all()
还有一些事情需要提及:
tableName()
方法获取实际的表名,而不是手动编写。在这种情况下,如果您决定更改表名,则只需在一个位置进行更改。