2011-10-31 62 views
0

我有一個的hasMany themes.I要顯示與themes.I計數模板列表模型模板現在用這個不能得到正確的計數

$this->Template->bindModel(
    array(
     'hasMany' => array(
      'TemplateTheme' => array(
       'className' => 'TemplateTheme', 
       'fields' => 'count(TemplateTheme.id) AS themes' 
      ) 
     ) 
    ), false ... 

它給了我2 templates.But它給我所有的3個主題計數在第一個模板,而2個主題屬於模板1和第三個主題屬於模板2 在查詢中它使用ID IN(template_id1,template_id2) 任何想法如何做到這一點?

+0

我建議使用虛擬領域本 - 看到的文檔 – mark

回答

1

您正在犯一個常見的錯誤,您每次計算每一行,因爲您沒有使用group by,您應該在您執行搜索時按Template.id進行分組。 Butttttttt ....有很多不會做一個加入:(所以你必須強迫它littleor使用類似聯成分

例如

$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'))); 

你也可以做相反的,因爲屬於關聯請問加入像模型中的這個

(它總是建議把它的靜態模型中,除非是不正常的關聯)

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

希望這可以幫助你,如果不只是評論