CakePHP按数组过滤关联的模型

时间:2012-10-09 12:40:43

标签: cakephp filtering containable

我有模特:Project =>关键字

使用HMBTM关系(在两个模型中设置)。

关键字表充当树,即。关键词之间有层次关系。

我正在使用可容纳的行为。

用户选择关键字。

我希望返回的记录(项目)受所选关键字或任何该关键字的子项限制。我正在尝试重用我的索引操作..如果没有选择关键字然后呈现标准索引视图,如果选择了关键字,则查找所有子关键字,然后将返回的项目过滤到具有任何关键字ID的项目。

我尝试创建一个子(和原始)关键字ID数组,但我无法弄清楚如何让该数组成为我的查找操作中的过滤。

我尝试过使用:

$this->Project->find('all',
    array(
        'contain' => array('Keyword.id'=>array($childkeywords))     
    )
);

其中$ childkeywords是使用array_push创建的相关ID的数组。但是这不使用键值对,只是每个id的int值。所以我觉得它结构不合理。

我觉得我想做一些相当容易的事情,但感觉我离解决方案越来越远了。是否没有标准方法将记录限制为关联模型的ID集合?

干杯

在Paulo的帮助下,我现在有了:

$this->Project->find('all', array(
                                    'fields' => array('id','title','country', 'project_ref'),
                                    'type' => array('inner'),
                                    'contain' => array('Keyword' => array(
                                                                'conditions' => array('Keyword.id' => $childkeywords)                                               
                                                                            )
                                                    )
                                            )
                                )

但是使用type inner并没有改变结果..

2 个答案:

答案 0 :(得分:0)

你应该有这样的东西:

$this->Project->find('all', array(
    'contain' => array('Keyword' => array(
                'conditions' => array('Keyword.id' => $childkeywords)
            )
    )
));

答案 1 :(得分:0)

尝试这样的事情:

$this->Project->Keyword->find('all', array(
    'conditions' => array(
        'Keyword.id' => array(1, 2, 3, 4)
    )
));

在这种情况下,您不需要使用Containable。

或者您可以尝试TreeBehavior