我有一个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
我怎么能用蛋糕做到这一点?
由于
答案 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
另见