我有一个简单的cakephp
应用,其中包含articles
个列cat_id
列,用于引用id
表中的cats
类别列。< / p>
我想要做的是显示所有类别名称,每个名称后面都有属于该类别的文章数量。
我知道find('count')
中有一个cakephp
函数,但只能处理一个表/字段。如何链接这两个表以获取我的视图的每个类别的类别名称和文章数量列表?
由于
答案 0 :(得分:4)
COme on!使用counterCache! 在表“cats”中创建字段article_count。在模型写入
/app/models/cat.php
class Cat extends AppModel
{
var $name = 'Cat';
var $belongsTo = array('Article'=>array('counterCache'=>true));
}
这就是全部!每次添加/删除文章时,它都会写入猫表文章的数量。 不要忘记将article_count包含在字段列表中
答案 1 :(得分:2)
在模型的afterFind回调中执行此操作可能更好,但也可以在控制器中完成。
$cats - $this->Cat->find('all',array('recursive'=>-1));
foreach($cats as $key=>$cat){
$cats[$key]['ArticleCount'] = $this->Cat->Article->find('count',array(
'conditions'=>array('Article.cat_id'=>$cat['Cat']['id']))
);
}
或查看是否有效
$cats = $this->Cat->find('all',array('contain'=>array(
'Article'=>array('fields'=>array('COUNT(*) AS ArticleCount')
)));
显然,您需要在类别模型上添加可包含的行为。
答案 2 :(得分:2)
您还可以使用countercache功能:http://book.cakephp.org/view/816/counterCache-Cache-your-count
答案 3 :(得分:2)
您还可以考虑签出counterCache以将计数缓存在列值中。
答案 4 :(得分:0)
谢谢,这有效:
$cats = $this->Article->Cat->find('all',array('recursive'=>-1));
foreach($cats as $key=>$cat){
$cats[$key]['ArticleCount'] = $this->Article->find('count',array(
'conditions'=>array('Article.cat_id'=>$cat['Cat']['id']))
);
}