Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从SQL选择sum group by到Yii framework 2中的活动记录_Php_Mysql_Sql_Yii2 - Fatal编程技术网

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

Php 从SQL选择sum group by到Yii framework 2中的活动记录,php,mysql,sql,yii2,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 framework 2中将此纯查询转换为ActiveRecord?我可以用Yii 2 ActiveRecord解决内部联接,但不知道如何解决求和包括分组方式,选择部分: use yii\db\Ex

下面是我的纯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 framework 2中将此纯查询转换为ActiveRecord?我可以用Yii 2 ActiveRecord解决
内部联接
,但不知道如何解决
求和
包括
分组方式
选择
部分:

use yii\db\Expression;

...

->select([new Expression('SUM(money) as total_money'), 'user_id'])
->groupBy('user_id')
分组依据
部分:

use yii\db\Expression;

...

->select([new Expression('SUM(money) as total_money'), 'user_id'])
->groupBy('user_id')
和的文档可在第节中找到

用于防止引用

这里不能使用方法,因为它是聚合方法并返回一个数字,而在本例中,您可以将它与其他列一起使用以返回一组记录

整个查询将如下所示:

$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()
    方法来获取实际的表名,而不是手动编写。在这种情况下,如果您决定更改表名,只需在一个位置更改它
  • 最好将连接件更换为

查看此链接-该链接显示如何对所有记录求和。在我的情况下,我需要求和并分组。我不能使用:$Model->find()->groupBy('column')->sum('column');因为groupBY没有效果。你能制作整个链条吗?因为我错过了->all()@OConnor用更多信息更新了答案。这样做是否更好:$personTable=Person::tableName();或者在任何地方都使用Person::tableName(),而不给变量赋值?给变量赋值是可选的,我在这里使用了单独的变量,因为在我看来,串联看起来更糟。