1

我有这个 cakephp 查找查询:

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

Model Instrument 拥有并属于许多 Instrumentbox。我想找到一个带有所有乐器的 Instrumentbox,用 . 搜索一个乐器名称$tag_search。它返回正确具有该仪器的仪器箱,但它不包括仪器中的所有仪器。有没有办法告诉 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?
           ]
        ]
     ]
   ]

当我用标签搜索它时也会发生同样的事情,所以想象一下在“标签”而不是“仪器”上方的结构中,仪器包含在仪器箱中,但标签不包含。因此,“顶级模型”不再包含在结构中。我必须手工制作还是可以让 cakephp 完成?提前致谢!

4

1 回答 1

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'))));
于 2013-02-26T04:21:52.727 回答