从SQL选择sum group by到Yii框架2中的活动记录

时间:2016-06-28 15:07:41

标签: php mysql sql yii2

以下是我的纯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

1 个答案:

答案 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()方法获取实际的表名,而不是手动编写。在这种情况下,如果您决定更改表名,则只需在一个位置进行更改。
  • 最好用relation替换连接部分。