CakePHP GROUP和COUNT项在列表中返回

前端之家收集整理的这篇文章主要介绍了CakePHP GROUP和COUNT项在列表中返回前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道这里有一些类似的问题,但它们都是关于何时使用
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');

猜你在找的PHP相关文章