【问题标题】:CakePHP repeats same queriesCakePHP 重复相同的查询
【发布时间】:2010-04-16 08:53:30
【问题描述】:

我有一个模型结构:Category hasMany Product hasMany Stockitem belongsTo Warehouse, Manufacturer。

我使用这段代码获取数据,使用 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 中获取数据,对于每一行。我们有几千行的数据集,我感觉它会影响性能。是否可以让它缓存结果而不重复相同的查询?

【问题讨论】:

    标签: sql cakephp containable


    【解决方案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 只执行一个查询。

    您也可以为复杂的查询创建数据库视图。

    【讨论】:

    • “where 子句”中的未知列“Stockitem.warehouse_id”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    相关资源
    最近更新 更多