0

我有模型:项目=>关键字

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

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

我正在使用可包含的行为。

用户选择关键字。

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

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

我试过使用:

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

其中 $childkeywords 是相关 id 的数组,使用 array_push 创建。但这不使用键值对,只使用每个 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)                                               
                                                                            )
                                                    )
                                            )
                                )

但是使用类型内部并没有改变结果..

4

2 回答 2

0

你应该有这样的东西:

$this->Project->find('all', array(
    'contain' => array('Keyword' => array(
                'conditions' => array('Keyword.id' => $childkeywords)
            )
    )
));
于 2012-10-09T13:43:42.637 回答
0

尝试这样的事情:

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

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

或者您可以尝试TreeBehavior

于 2012-10-09T14:03:06.447 回答