我有模特: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并没有改变结果..
答案 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。