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

我与此代码获取数据,使用中可容纳能够在相关联的模型来过滤更深:

$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