无法正确计算数据

时间:2011-10-31 05:11:38

标签: php cakephp cakephp-1.3

我有一个模型模板,其中包含很多主题。我想显示带有主题数量的模板列表。我正在使用这个

$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) 知道怎么做吗?

1 个答案:

答案 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')));

希望这对你有帮助,如果不只是评论