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']);

另见