не могу получить количество данных правильно - PullRequest
0 голосов
/ 31 октября 2011

У меня есть шаблон модели, который имеет много тем. Я хочу показать список шаблонов с количеством тем. Я использую это

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

это дает мне 2 шаблона. Но это дает мне все 3 темы в первом шаблоне, тогда как 2 темы относятся к шаблону 1, а третья тема принадлежит шаблону 2 в запросе используется идентификатор IN (template_id1, template_id2) Есть идеи как это сделать?

1 Ответ

1 голос
/ 31 октября 2011

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

Надеюсь, это поможет вам, если не просто комментарий

...