我有一个模型模板,其中包含很多主题。我想显示带有主题数量的模板列表。我正在使用这个
$this->Template->bindModel(
array(
'hasMany' => array(
'TemplateTheme' => array(
'className' => 'TemplateTheme',
'fields' => 'count(TemplateTheme.id) AS themes'
)
)
), false ...
它给了我2个模板。但是它给了我第一个模板中的所有3个主题计数,而2个主题属于模板1而第三个主题属于模板2 在查询中它使用id IN(template_id1,template_id2) 知道怎么做吗?
答案 0 :(得分:1)
你犯了一个常见的错误,你每次都在计算每一次因为你没有使用group by,你应该做的就是在你搜索时按Template.id进行分组。 Butttttttt ....有很多人不会加入:(所以你必须强迫它使用类似可链接组件的东西
例如
$join = array(
array('table' => 'templateThemes',
'alias' => 'TemplateTheme',
'type' => 'LEFT',
'conditions' => array(
'Template.id = TemplateTheme.Template_id',
)
)
);
$fields = array('Template.id','count(TemplateTheme.id) AS themes');
$this->Template->find('all', array('fields'=>$fields, 'joins'=>$join', $group =>array('Template.id')));
你也可以反过来做,因为belongsTo做了类似这样的连接
模型中的(除非不是正常关联,否则始终建议将其静态放入模型中)
var belongsTo = array(
'Template'=> array(
'classname' => 'Template',
'foreign_key' => 'template_id'
);
并在控制器中
$fields = array('Template.id','count(TemplateTheme.id) AS themes');
$this->Template->find('all', array('fields'=>$fields, $group =>array('Template.id')));
希望这对你有帮助,如果不只是评论