题
我有个模型结构:类别的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的只执行一个查询。
或者,也可以创建复杂查询数据库视图。
不隶属于 StackOverflow