CakePHP为select连接设置递归

时间:2014-07-07 18:39:45

标签: cakephp cakephp-2.1 cakephp-2.3

我在这样的模型上创建搜索:

$options = array(
    'conditions' => array(
        'CompletedSurvey.' . $this->CompletedSurvey->primaryKey => $id
    ),
    'recursive' => 5
);
$survey = $this->CompletedSurvey->find('first', $options);

我设置模型的方式,这将返回五个模型(对各种连接做)每次递归最多5次(如果可用)。问题是我只希望其中一个模型被递归X5。其他人不需要。

有没有办法告诉find函数递归哪些表以及将它们递归到哪个级别?那么,告诉蛋糕哪些模型可以递归,以及每种模型在哪个级别?

2 个答案:

答案 0 :(得分:2)

请阅读关于模型递归属性的CakePHP食谱,因为它不像你想象的那样工作。 http://book.cakephp.org/2.0/en/models/model-attributes.html#recursive

您正在寻找的是可包含的行为,您可以在其中准确指定要返回的模型。请参阅有关如何使用可食用的食谱。 http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

答案 1 :(得分:0)

嗯,这不是完全递归的,但是访问深层关系并避免在主模型上使用递归的唯一方法是使用可包含的行为:

$options = array(
    'conditions' => array(
        'CompletedSurvey.' . $this->CompletedSurvey->primaryKey => $id
    ),
    'contain' => array(
        'SomeModel.SomeOtherModel.AnotherModel.AnotherModel'
    ) 
);

$survey = $this->CompletedSurvey->find('first', $options);

不要忘记为CompletedSurvey模型设置可包含的行为!

class CompletedSurvey extends AppModel {
    public $actsAs = array('Containable');
}