从 SQL select sum group by 到 Yii 框架中的 Active Record 2

O C*_*nor 2 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
Run Code Online (Sandbox Code Playgroud)

如何将这个纯查询转换为 Yii 框架 2 中的 ActiveRecord?我可以解决这个问题INNER JOIN,但不知道如何解决,SUM包括GROUP BY使用 Yii 2 ActiveRecord

aro*_*hev 5

SELECT部分:

use yii\db\Expression;

...

->select([new Expression('SUM(money) as total_money'), 'user_id'])
Run Code Online (Sandbox Code Playgroud)

GROUP BY部分:

->groupBy('user_id')
Run Code Online (Sandbox Code Playgroud)

select()groupBy()的文档可以在查询生成器部分找到。

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()
Run Code Online (Sandbox Code Playgroud)

还有几件事要提:

  • 最好使用tableName()方法来获取实际的表名,而不是手动编写。在这种情况下,如果您决定更改表名称,则只需在一处更改即可。
  • 最好用关系替换连接部分。