CakePHP повторяет те же запросы - PullRequest
1 голос
/ 19 марта 2010

У меня есть структура модели: Категория имеетМного товара естьМного Stockitem принадлежитСклад, Производитель.

Я выбираю данные с помощью этого кода, используяableable, чтобы иметь возможность фильтровать глубже в связанных моделях:

$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 для каждой строки. У нас есть наборы данных из нескольких тысяч строк, и я чувствую, что это повлияет на производительность. Можно ли сделать так, чтобы он кешировал результаты и не повторял одни и те же запросы?

1 Ответ

1 голос
/ 19 марта 2010

Попробуйте это:

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

Если вы удалите Warehouse and Manufacturer, вы обнаружите, что Cakephp выполняет только один запрос.

В качестве альтернативы вы можете создавать представления базы данных для сложных запросов.

...