【问题标题】:CakePHP: conditions with hasManyCakePHP:具有 hasMany 的条件
【发布时间】:2011-08-24 12:00:31
【问题描述】:

我有一个博客模型,它定义了 var $hasMany=array("Comment");

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

如果在博客模型中,我愿意

$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)));

我收到一条错误消息,显示 Unknown Comment.comment_type_id 列,因为 Cake 没有加入。

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

【问题讨论】:

    标签: cakephp


    【解决方案1】:
     $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');
    

    【讨论】:

      【解决方案2】:

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

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

      如果我真的想限制一些事情,我经常使用ad hoc joins。我喜欢他们使我的结果尽可能干净,即使它使find 数组更加冗长。

      【讨论】:

        猜你喜欢
        • 2012-11-03
        • 2018-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多