Вы делаете распространенную ошибку, вы каждый раз считаете, так как вы не используете 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')));
Вы также можете сделать это наоборотпринадлежит, чтобы объединить что-то вроде этого
в вашей модели (всегда рекомендуется поместить это статическое в вашей модели, если это не нормальная связь)
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')));
Надеюсь, это поможет вам, если не просто комментарий