Cakephp递归查找再次包括顶级模型

时间:2013-01-07 12:11:42

标签: cakephp recursion model include find

我有这个cakephp查找查询:

$results = $this->Instrument->find('all', array('recursive' => 2, 'conditions' => array('OR' => array('Instrument.name' => $tag_search, 'Instrument.nameEN' => $tag_search))));

模型乐器拥有并属于许多Instrumentbox。我想找一个仪器箱,里面有所有仪器,用$tag_search搜索一个仪器名称。 它返回具有该仪器的Insrtumentbox,但它不包括Instrument中的所有仪器。有没有办法告诉cakephp再次加载“顶级模型”,以便我得到结构

$results = array(
   0 => [
     'Instrument' => [
        'name' => "$tag_search value",
        '...' => ...,
        'Instrumentbox' => [
           0 => [
             '...' => '...', //everything else is properly included
             'Instrument' => [...] //this is NOT included, how can I include it?
           ]
        ]
     ]
   ]

当我用标签搜索它时会发生同样的事情,所以想象在“Tag”上面的结构而不是“Instrument”,然后仪器包含在Instrumentbox中,但标签却没有。因此,“顶级模型”不再包含在结构中。我是否必须手工制作或者我可以制作蛋糕吗? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

您可以尝试使用Contain执行此操作。它比使用递归超过1要好得多。您可以精确控制您想要获得的结果,这对于此类事情是有益的,并且通常更好地提高性能。

http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

所以,未经测试的代码:

//model
public $actsAs = array('Containable');
// controller
$this->Instrument->recursive=1;
$this->contain(array('Instrument'=> array('InstrumentBox'=> array('Instrument'))));