在CakePHP上禁用连接查找功能

时间:2013-02-23 23:23:25

标签: cakephp cakephp-2.0 cakephp-2.3

是否有一种简单的方法可以在CakePHP

中禁用查找查询的连接

我有一个Product模型对象与User有$belongsTo的关系。 我的查询查询是:

$product = $this->Product->find('first',array(
    'fields' => array(
        'Product.name'
    ),
    'conditions' => array(
        'Product.active'=>1,
    ),

    'recursive' => false
));

执行的sql查询如下所示:

SELECT `Product`.`name` FROM `db`.`products` AS `Product` LEFT JOIN `db`.`users` AS `Owner` ON (`Product`.`owner_id` = `Owner`.`id`) LIMIT 1

现在我想出于性能原因摆脱users的连接,因为我不使用这些数据。是否有捷径可寻?我希望禁用递归和手动设置字段参数可以解决问题。

1 个答案:

答案 0 :(得分:2)

在AppModel中设置public $recursive = -1;是最佳做法(imo)。这将消除正在进行的自动魔术发现,并且还允许您在需要其他数据时使用Containable,而无需在整个地方将递归设置为-1。

我相信CakePHP 3+,它们将摆脱递归并默认设置为Containable(正如我所听到的那样 - 我还没有验证过。)

(如果你真的不想在任何地方设置它,你可以在查找之前立即设置它 - 但是......最好只在AppModel中设置它并且永远不要改回它)