加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

CakePHP GROUP和COUNT项在列表中返回

发布时间:2020-12-13 16:39:44 所属栏目:PHP教程 来源:网络整理
导读:我知道这里有一些类似的问题,但它们都是关于何时使用 Model-find('all'); 但那不是我正在做的事情,我在做: Model-find('list'); 这是什么使这个工作和不工作之间的区别. 鉴于一组产品,我想找到该组中的所有品牌以及每个品牌的数量. 听起来很简单,这就是我所
我知道这里有一些类似的问题,但它们都是关于何时使用
Model->find('all');

但那不是我正在做的事情,我在做:

Model->find('list');

这是什么使这个工作和不工作之间的区别.

鉴于一组产品,我想找到该组中的所有品牌以及每个品牌的数量.

听起来很简单,这就是我所做的:

$fields = array('Product.brand','COUNT(`Product`.`brand`) AS brand_count')
$brand_data = $this->Product->find('list',array(
    'fields'=>$fields,'conditions'=>$conditions,'recursive'=>0,'group' => 'Product.brand'
));
debug($brand_data);

在这里我告诉它给我一个数组,其中键是Product.brand,值为COUNT(Product.brand)

我得到这个:

Array
(
    [Brand A] => 
    [Brand B] => 
    [Brand C] =>  
)

当我被期待时:

Array
(
    [Brand A] => 534
    [Brand B] => 243
    [Brand C] => 172
)

它可以工作,如果我做所有而不是列表,它只是给我一个更复杂的数组来钻取.我很好用所有,我只是想先看看它是否有理由不在列表中工作?

简要回顾:find(‘list’)存在别名字段问题(因此聚合函数如COUNT()等),所以你应该使用CakePHP的1.3代替.对于CakePHP 1.2,使用的是 a contraption.

详细:
最可能的问题在于你的问题

COUNT(`Product.brand`) AS brand_count

因为find(‘list’)可以

Set::combine($results,$lst['keyPath'],$lst['valuePath'],$lst['groupPath'])

查询结果,$lst [‘valuePath’]将是

"{n}.COUNT(`Product`.`brand`) AS brand_count"

而在结果中它实际上是“{n} .Product.brand_count” – 不排队.

尝试将COUNT()设为虚拟字段.

即:

//model
var $virtualFields = array(
    'brand_count' => 'COUNT(Product.brand)'
);

//controller
$fields = array('Product.brand','Product.brand_count');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读