CakePHP:hasMany的条件

时间:2011-08-24 12:00:31

标签: cakephp

我有一个已定义var $ hasMany = array(“Comment”);

的Blog模型

如何在评论中应用过滤器以仅选择与特定评论类别匹配的博客项目?

如果,在博客模型中,我做

$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列,因为Cake没有进行连接。

我认为这是一个相当普遍的问题,所以我认为解决起来很简单,但我找不到好办法

2 个答案:

答案 0 :(得分: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');

答案 1 :(得分:2)

您可以反向工作并选择特定类别中的所有评论,并包含他们发布到的博客帖子。我目前无法找到它,但我很确定我已经在文档中看到了“推荐”方法,在这个相对简单的情况下它可能是完全足够的。这绝对是我先尝试的。

您还可以使用可包含的行为并设置包含Comment的条件,但这将返回所有博客帖子,并且没有评论类别与您所追求的不匹配的评论。我从来都不喜欢这个解决方案,因为它对我来说只是感觉笨拙和不准确(虽然技术上并非如此)。

如果我真的想限制事情,我经常使用ad hoc joins。我喜欢他们尽可能保持我的结果尽可能干净,即使它会产生更详细的find数组。