包含的“包含”属性未被重置

时间:2012-11-20 18:33:25

标签: cakephp cakephp-2.1 containable

在以下代码中,Containable的行为与CakePHP 2.1.2中的预期不符:

class ReportCard extends AppModel {

....
    // debug shows expected results
    public function test1(){
        $this->Behaviors->attach('Containable');
        $params = array(
                'conditions' => array('ReportCard.id' => 1),
                'contain' => array(
                        'ReportCardGradingPeriodCollection' => array(
                                'GradingPeriodCollection')));

        debug($this->find('first', $params));
        $this->Behaviors->detach('Containable');
    }

    // Unexpected: debug shows same array as test1
    public function test2(){
        $this->Behaviors->attach('Containable');
        $params = array(
                'conditions' => array('ReportCard.id' => 1),
                'contain' => array(
                        'ReportCardGradingPeriodCollection' => array(
                                'GradingPeriodCollection' => array(
                                        'GradingPeriodCollectionDetail' => array(
                                                'GradingPeriod')))));

        debug($this->find('first', $params));
        $this->Behaviors->detach('Containable');
    }

}

从控制器调用函数时出现意外结果。 test1()显示预期的数组。 test2()显示来自test1的相同数组。如果我运行test2()然后test1()我会得到预期的结果(大数组,然后是小数组)。

class ReportCardsController extends AppController {

    ....

    public function test(){
        $this->ReportCard->test1();
        $this->ReportCard->test2();
    }

}

我尝试在模型中使用actAs而不是动态加载每个函数中的行为,但这没有帮助。

如果我遗漏了一些简单的话,我道歉。提前谢谢!

1 个答案:

答案 0 :(得分:1)

引用手册:

  

必须附加包含中使用的所有模型

从您的示例代码中不清楚您是否正在这样做。

这是该笔记的剩余部分:

  

您可以考虑将其附加到您的AppModel。