4

私はcakephp2.0で開発されたサイトを持っています、私はここに関係するいくつかのテーブルを持っています例です:これは私の関係です:

材料(id、name)には多くのバージョンがあります

成分_プロパティ(id、property_id、version_id)は、プロパティ、バージョンに属します

プロパティ(id、name、value、group_id、unit_id)には多くのcomponent_propertiesがあり、groups、unitsに属しています。

groups(id、name)には多くのプロパティがあります

units(id、name)には多くのプロパティがあります

バージョン(id、name、ingredient_id、active)には多くのcomponent_propertiesがあり、componentsに属しています。

私はcomponentController.phpにいて、このすべてのデータをどこで取得したいのVersion.active=1Version.ingredient_id=2

これは私の質問です:

$this->set(
        'ingredient',
        $this->Ingredient->Version->find('all', array(
            'recursive' => 2,
            'conditions' => array(
                'Version.active' => 1,
                'Version.ingredient_id' => 2
             )
        ))
);

私はこのようなクエリをたくさん持っていますが、再帰2が説明したテーブルのすべてのデータを取得するための最良の方法であるか、それとも最も迅速に(実装しないクエリの速度に関して)より良い方法があるかを知りたいです。 。このクエリは機能するので、誰かが私のコードを最適化するのを手伝ってくれることを願っていますが、関係する多くのテーブルのデータを取得するためのより良い方法かどうかはわかりません。

ありがとう。

4

1 に答える 1

1

'recursive' => 2非常に多くのデータを取得する場合は、最適な方法ではありません。生成されるクエリが多すぎると思います。収容可能な動作にも同じ欠点があります。私にとって最善の方法は、モデルの関連付けをアンバインドし、その場でテーブル結合を構築することでした。ここで例を見ることができます。しかし、自分が何をしているのかを理解するには、ある程度の SQL を知っている必要があります。

于 2012-09-19T22:19:12.357 に答える