CakePHP 通过数组过滤关联模型

问题描述 投票:0回答:2

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

使用 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)                                               
                                                                            )
                                                    )
                                            )
                                )

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

php filter cakephp containable
2个回答
0
投票

你应该有这样的东西:

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

0
投票

尝试这样的事情:

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

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

或者你可以尝试TreeBehavior

© www.soinside.com 2019 - 2024. All rights reserved.