下面是我的纯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
如何将此纯查询转换为ActiveRecord在Yii框架2?我可以解决INNER JOIN
,但不知道如何解决SUM
包括GROUP BY
与Yii 2 ActiveRecord
SELECT
part:
use yii'db'Expression;
...
->select([new Expression('SUM(money) as total_money'), 'user_id'])
GROUP BY
part:
->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()
方法获得实际的表名,而不是手动编写。在这种情况下,如果您决定更改表名,只需要在一个地方更改即可。 - 连接部分最好换成关系部分
$atsum =Atttransactions::find()->select([new 'yii'db'Expression('SUM(atttt_for_receive) as for_receive')])->addselect([new 'yii'db'Expression('SUM(att_received) as received')])→在哪里([' attt_attc_id ' =祝辞modelTran→美元attt_attc_id])→→asArray()一();