我有模型:项目=>关键字
使用 HMBTM 关系(在两个模型中都设置)。
关键字表充当树,即。关键字之间具有层次关系。
我正在使用可遏制的行为。
用户选择关键字。
我希望返回的记录(项目)受到所选关键字或该关键字的任何子项的限制。 我正在尝试重用我的索引操作..如果未选择关键字,则呈现标准索引视图,如果选择关键字,则查找所有子关键字,然后将返回的项目过滤为具有任何关键字 ID 的项目。
我尝试创建一个子(和原始)关键字 id 数组,但我不知道如何让该数组成为我的查找操作中的过滤。
我尝试过使用:
$this->Project->find('all',
array(
'contain' => array('Keyword.id'=>array($childkeywords))
)
);
其中 $childkeywords 是相关 id 的数组,使用 array_push 创建。但这不使用键值对,只是每个 id 的 int 值。所以我认为它的结构不正确。
我觉得我想做一些很简单的事情,但感觉我离解决方案越来越远。是否没有标准方法将记录限制为关联模型的 id 集合?
干杯
在保罗的帮助下,我现在有了:
$this->Project->find('all', array(
'fields' => array('id','title','country', 'project_ref'),
'type' => array('inner'),
'contain' => array('Keyword' => array(
'conditions' => array('Keyword.id' => $childkeywords)
)
)
)
)
但是使用类型内部并没有改变结果..
你应该有这样的东西:
$this->Project->find('all', array(
'contain' => array('Keyword' => array(
'conditions' => array('Keyword.id' => $childkeywords)
)
)
));
尝试这样的事情:
$this->Project->Keyword->find('all', array(
'conditions' => array(
'Keyword.id' => array(1, 2, 3, 4)
)
));
在这种情况下您不需要使用 Containable。
或者你可以尝试TreeBehavior。