2011-10-31 3 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を与え得るカント2つのテーマがテンプレート1に属し、3つ目のテーマがテンプレート2に属しています クエリでID IN(template_id1、template_id2)を使用しています これを行う方法はありますか?

+0

をコメントできない場合、私はこのために仮想フィールドを使用することをお勧めし、あなたを助けます - マニュアルを参照してください – mark

答えて

1

一般的な間違いをしています。あなたがグループを使用していないたびに毎回カウントしています。検索を行うときに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'))); 

を結合可能な成分のようなものがそれを強制する必要がありますのでbelongsToのは、参加しないので、あなたはまた、逆にそれを行うことができます:(参加くださいました

var belongsTo = array(
     'Template'=> array(
      'classname' => 'Template', 
      'foreign_key' => 'template_id' 
     ); 

とcontrollであなたのモデルでは、この

のようなものは、(通常の関連はない場合を除き、常にあなたのモデルで静的にそれを置くことをお勧めします)えー

$fields = array('Template.id','count(TemplateTheme.id) AS themes'); 
$this->Template->find('all', array('fields'=>$fields, $group =>array('Template.id'))); 

希望これはちょうど

関連する問題