CakePHP重复相同的查询

时间:2010-03-19 08:31:58

标签: sql cakephp containable

我有一个模型结构:类别hasMany产品hasMany Stockitem属于仓库,制造商。

我使用此代码获取数据,使用containsable可以在关联模型中更深入地过滤:

$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 个答案:

答案 0 :(得分:1)

试试这个:

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

如果删除仓库和制造商,您会发现Cakephp只执行一个查询。

或者,您可以为复杂查询创建数据库视图。