1

私はモデル構造を持っています。

このコードでデータをフェッチし、containable を使用して、関連付けられたモデルをより深くフィルター処理できるようにします。

$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

基本的に、データ構造を構築するとき、Cake は行ごとに mysql からデータを何度も取得します。数千行のデータセットがあり、パフォーマンスに影響を与えると感じています。結果をキャッシュし、同じクエリを繰り返さないようにすることは可能ですか?

4

1 に答える 1

1

これを試して:

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

WarehouseとManufacturerを削除すると、Cakephpは1つのクエリしか実行しないことがわかります。

または、複雑なクエリのデータベースビューを作成することもできます。

于 2010-03-19T15:29:24.040 に答える