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

时间:2017-11-09 16:24:36

标签: php cakephp-2.0 cakephp-2.3

我的CakePHP 2应用程序由于从数据库中提取时从我的关联中获取的数据量而遇到性能问题。其中一个例子就是我的Task元素。 Task有许多FilesComments。因此,当我从数据库中提取Task时,我会收到有关Task的详细信息,以及与该Files相关联的所有CommentsTask的所有详细信息1}},以及与文件/评论相关的其他关联,例如发布它们的用户。

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

$this->Task->recursive = -1

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

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

CakePHP中是否有办法更好地控制相关模型的递归?

1 个答案:

答案 0 :(得分:1)

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

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

要选择包含某些字段的相关模型,您可以使用以下代码:

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