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を持っており、それらに属しています。で1つの楽器名を検索するすべての楽器を含む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?
           ]
        ]
     ]
   ]

タグを使用して検索した場合も同じことが起こります。したがって、「Instrument」ではなく「Tag」の上の構造で、楽器はInstrumentboxに含まれていますが、タグは含まれていません。したがって、「トップモデル」は構造に再び含まれません。手作業で作成する必要がありますか、それとも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 に答える