質問

私は、モデルの構造を有する:カテゴリーhasManyの製品hasManyのStockitem belongsToの倉庫、メーカー

私は、関連するモデルに深くフィルタリングすることができるように収容可能用いて、このコードとデータをフェッチする

$this->Category->find('all', array(
        'conditions' => array('Category.id' => $category_id),
        'contain' => array(
            'Product' => array(
                'Stockitem' => array(
                    'conditions' => array('Stockitem.warehouse_id' => $warehouse_id),
                    'Warehouse',
                    'Manufacturer',
                )
            )
        ),
        )
    );

データ構造がうまく返され、しかし、私は、データセットに基づいて、時には何百行のようなクエリの、等複数の繰り返しのクエリを取得します。

SELECT `Warehouse`.`id`, `Warehouse`.`title` FROM `beta_warehouses` AS `Warehouse` WHERE `Warehouse`.`id` = 2

基本的に、データ構造のケーキを構築するときは行ごとに、何度も何度ものMySQLからデータをフェッチします。私たちは、数千行のデータセットを持っている、と私はパフォーマンスに影響を与えるために起こっている感覚を持っています。それは結果をキャッシュしますし、同じクエリを繰り返さないことは可能ですか?

役に立ちましたか?

解決

これを試してください:

$this->Product->find('all', array(
    'conditions' => array('Category.id' => $category_id, 'Stockitem.warehouse_id' => $warehouse_id),
    'contain' => array(
        'Category'
        , 'Stockitem' => array(
            'Warehouse'
            , 'Manufacturer'
        )
    ),
));
あなたは倉庫やメーカーを削除する場合は

あなたはCakePHPが一つだけのクエリを実行していることがわかります。

別の方法としては、複雑なクエリ用のデータベースビューを作成することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top