如何在CakePHP3.8QueryBuilder中使用Sum?

如何在CakePHP3.8QueryBuilder中使用Sum?,cakephp,cakephp-3.x,sql-function,Cakephp,Cakephp 3.x,Sql Function,我有这个简单的代码,我想知道如何使用cakephp 3.8 querybuilder进行查询,然后如何获取它 选择sum(quantity)作为用户id=7的购物车的数量; 我正在使用此查询: $quantity=$this->Carts ->查找() ->挑选([ 'quant'=>$quantity->func()->sum('quantity') ]) ->在哪里([ 'user_id'=>this->Auth->user('id') ]) ->toArray(); 是这样吗 我得到了

我有这个简单的代码,我想知道如何使用cakephp 3.8 querybuilder进行查询,然后如何获取它

选择sum(quantity)作为用户id=7的购物车的数量;
我正在使用此查询:

$quantity=$this->Carts
->查找()
->挑选([
'quant'=>$quantity->func()->sum('quantity')
])
->在哪里([
'user_id'=>this->Auth->user('id')
])
->toArray();
是这样吗

我得到了这个错误-
在null上调用成员函数func()

直到查询生成器从
toArray()
调用返回后,
$quantity
变量才存在,因此您不能在
select()
调用之前使用它,即使在调用之后,返回值也不再是查询生成器实例,而是一个结果数组,这就是
toArray()
将返回的内容

在调用
select()
之前存储对查询生成器的引用,如:

$quantityQuery = $this->Carts->find();
$quantity = $quantityQuery 
    ->select([
        'quant' => $quantityQuery->func()->sum('quantity')
    ])
    //...
或者将可调用的函数传递给
select()
,它将检索查询实例作为参数:

$quantity=$this->Carts
->查找()
->选择(函数(\Cake\ORM\Query$Query){
返回[
'quant'=>$query->func()->sum('quantity')
];
})
//...
另见


您阅读了吗?请不要在评论中添加代码,而是将其添加到您的问题中,并描述您遇到的问题-谢谢!谢谢@ndm的编辑,你能给我一个解决方案吗?我怎样才能从查询中获取所需的结果并设置为.ctpfiles@Vishaal你可能想好好读一读。