CakePHP 2:控制关联模型的递归

CakePHP 2: Controlling recursive on associated models

我的 CakePHP 2 应用程序 运行 由于从数据库中提取时从我的关联中提取的数据量而出现性能问题。我的 Task 元素就是其中一个例子。一个Task有很多FilesComments。因此,当我从数据库中提取 Task 时,我会收到有关 Task 的详细信息,以及与该 [=] 关联的所有 FilesComments 的所有详细信息12=],以及与 files/comments 相关的其他关联,例如发布它们的用户。

现在我知道我可以使用递归来控制从数据库中提取任务时获取的数据量,并且:

$this->Task->recursive = -1

将完全阻止获取任何关联。然而,我仍然希望能够获得关于 CommentsFiles 的非常基本的数据,我只是希望能够减少进一步获取的关联。类似于:

$this->Task->Comment->recursive = -1

CakePHP 中有没有一种方法可以更好地控制关联模型的递归?

要完美控制关联的递归级别,您应该使用the containable behavior。此行为允许您 select 仅一些相关记录,您还可以选择关联模型的某些字段,要激活可包含的行为,您可以使用此代码:

<?php
class Post extends AppModel {
    public $actsAs = array('Containable');
}

而对于 select 具有某些字段的相关模型,您可以使用此代码:

$this->Model->find('all', array(
     'contain' => array(
         'RelatedModel1',
         'RelatedModel2' => array(
            'fields' => array('field1', 'field2'),
         ),
         'RelatedModel3' => array(
            'RelatedModel3RelatedModel'
        )
    )
));