下面是我的纯 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
最佳答案
选择
部分:
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 .
关于php - 从 SQL select sum group by 到 Yii 框架中的 Active Record 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38079914/