2011-08-24 82 views
2

我有一個已定義var $ hasMany = array(「Comment」)的博客模型;CakePHP:與條件hasMany

如何在評論上應用過濾器以僅選擇與某個評論類別匹配的博客項目?

如果在博客模式,我做

$this->recursive=2; 
$this->hasMany=array("Comment"); //in Comment i have $belongsTo("Blog") 
return $this->find("all",array("conditions"=>array("Comment.comment_type_id"=>123))); 

我得到說未知Comment.comment_type_id列,因爲蛋糕不作加入一個錯誤。

我覺得這是一個相當普遍的問題,所以我認爲簡單的解決,但我不能找到一個很好的辦法

回答

2

你可以反向運作,並選擇特定類別的所有意見,包括博客文章說他們被張貼到。目前我無法找到它,但我確信我已經在文檔中將它看作是「推薦」方法,在這種相對簡單的情況下它可能已經足夠了。這絕對是我第一次嘗試。

您也可以使用可包含的行爲並設置包含Comment的條件,但會返回所有博客文章,並且在評論類別與您之後的內容不匹配的情況下將返回所有博客文章並且沒有評論。我從來不喜歡這個解決方案,因爲它對我來說感覺笨拙和不準確(儘管它在技術上不是)。

如果我真想限制東西,我經常用ad hoc joins。我喜歡他們儘可能保持我的結果儘可能乾淨,儘管它使得數組更加冗長。

8
$this->bindModel(array(
    'hasMany' => array(
     'Comment' => array(
      'conditions' => array('Comment.comment_type_id' => 123) 
     )))); 
$this->find('all'); 

或者如果模型已經與評論使用綁定:

$this->hasMany['Comment']['conditions'] = array('Comment.comment_type_id' => 123); 
$this->find('all');