CakePHP 3:如何计算 2 列的总和
CakePHP 3 : how to make a sum of 2 columns
我的 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
蛋糕怎么做?
谢谢
您正在做的是在 PHP 级别上添加两个对象,这将导致对象被强制转换为整数,这肯定不会工作并因错误而失败。
您需要使用表达式生成器来构建生成所需 SQL 的表达式,只需添加您的函数表达式并使用 +
运算符 tie/conjugate 它们。此外,在定义 $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']);
另见
我的 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
蛋糕怎么做?
谢谢
您正在做的是在 PHP 级别上添加两个对象,这将导致对象被强制转换为整数,这肯定不会工作并因错误而失败。
您需要使用表达式生成器来构建生成所需 SQL 的表达式,只需添加您的函数表达式并使用 +
运算符 tie/conjugate 它们。此外,在定义 $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']);
另见