cakphp 3:如何总计2列

时间:2017-06-08 17:27:10

标签: sql cakephp expression cakephp-3.0 query-builder

我有一个sql请求的问题,我想总结2列: 这种语法不起作用......

$query=$this->Results->find()
    ->contain(['Users', 'Events'])
    ->select([
        'user_id'=>'Users.id',
   'val'=>$query->func()->sum('Events.value')+$query->func()->sum('Results.value')
    ])
    ->group(['user_id']); 

我希望在sql请求中有类似的东西:

SUM(Events.value)+SUM(Results.value)) AS `val 

我怎么能用蛋糕做到这一点?

由于

1 个答案:

答案 0 :(得分:2)

你正在做的是在PHP级别添加两个对象,这将导致对象被转换为整数,这肯定不会工作并因错误而失败。

您需要使用表达式构建器来构建一个生成所需SQL的表达式,只需添加函数表达式并将它们与+运算符绑定/共轭。此外,在定义$query之前,您无法访问sum(),我建议您使用标识符表达式作为您传递给use Cake\Database\Expression\IdentifierExpression; // ... $query = $this->Results->find(); $query ->contain(['Users', 'Events']) ->select([ 'user_id' => 'Users.id', 'val' => $query ->newExpr() ->add($query->func()->sum(new IdentifierExpression('Events.value'))) ->add($query->func()->sum(new IdentifierExpression('Results.value'))) ->tieWith('+') // setConjunction() as of CakePHP 3.4 ]) ->group(['user_id']); 的列名:

node.normal['A']['B']['C']="completed"
node.save

另见