我知道这里有类似的问题,但是在使用
时都是如此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
)
如果我全部而不是列表,它会起作用,但它只是给我一个更复杂的数组来深入研究。我很好用全部,我只是想先看看它是否有理由不在列表中?
答案 0 :(得分:12)
简要回顾: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');
答案 1 :(得分:1)
在Paginator的控制器中你可以像这样使用:
.sub-ol-1 {
list-style: none;
}
.sub-ol-1 > li {
position: relative;
}
.sub-ol-1 > li:before {
position: absolute;
left: -34px;
width: 30px;
text-align: right;
}
.sub-ol-1 > li:nth-child(1):before {content: '1.1.';}
.sub-ol-1 > li:nth-child(2):before {content: '1.2.';}
.sub-ol-1 > li:nth-child(3):before {content: '1.3.';}
.sub-ol-1 > li:nth-child(4):before {content: '1.4.';}
.sub-ol-1 > li:nth-child(5):before {content: '1.5.';}
.sub-ol-1 > li:nth-child(6):before {content: '1.6.';}
.sub-ol-1 > li:nth-child(7):before {content: '1.7.';}
.sub-ol-1 > li:nth-child(8):before {content: '1.8.';}
.sub-ol-1 > li:nth-child(9):before {content: '1.9.';}
.sub-ol-1 > li:nth-child(10):before {content: '1.10.';}
/* more if needed */