使CakePHP协会变得更聪明

时间:2013-07-05 12:39:07

标签: cakephp cakephp-model

我的CakePHP应用程序中有三个相互关联的模型。我的Article属于CategoryAuthor。我查询了类别的最新文章:

$category = $this->Category->find('first', array(
    'conditions' => array(
        'Category.slug' => $slug
    ),
    'contain' => array(
        'Article' => array(
            'Author'
        )
    )
));

但是,我注意到这非常效率低,因为它发现它查询我的Article数据库表的每个authors记录,即使我已经获取了那个特别作者的详细信息。因此,如果我获取10篇文章并且它们都是同一作者,那么CakePHP仍然会发出10个单独的 SELECT语句。

使用Containable行为时,我可以使CakePHP“更智能”,以便它只发出必要的查询吗?在我的情况下,发出第一个SELECT语句来查找作者,如果ID匹配,则在后续Article行中使用该结果。

1 个答案:

答案 0 :(得分:0)

通过cake的api有几种方法可以做到这一点 - 最简单的方法是将Model的$ recursive属性设置为-1或0,或者使用Model的unbind()函数