【问题标题】:How to use Sum in cakephp 3.8 querybuilder?如何在 cakephp 3.8 查询构建器中使用 Sum?
【发布时间】:2020-04-10 06:50:23
【问题描述】:

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

SELECT sum(quantity) as quant from carts WHERE user_id = 7;

我正在使用这个查询:

$quantity = $this->Carts
    ->find()
    ->select([
        'quant' => $quantity->func()->sum('quantity')
    ])
    ->where([
        'user_id' => $this->Auth->user('id')
    ])
    ->toArray();

是这样吗?

我收到此错误- 在 null 上调用成员函数 func()

【问题讨论】:

  • 请不要在 cmets 中添加代码,而是将其添加到您的问题中,并描述您遇到的问题 - 谢谢!
  • 感谢编辑@ndm 你能给我解决方案吗

标签: cakephp cakephp-3.x sql-function


【解决方案1】:

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

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

$quantityQuery = $this->Carts->find();
$quantity = $quantityQuery 
    ->select([
        'quant' => $quantityQuery->func()->sum('quantity')
    ])
    //...

或将可调用对象传递给select(),它将检索查询实例作为参数:

$quantity = $this->Carts
    ->find()
    ->select(function (\Cake\ORM\Query $query) {
        return [
            'quant' => $query->func()->sum('quantity')
        ];
    })
    //...

另见

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多