0

在以下代码中,可包含的行为与我在 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在模型中使用,而不是在每个函数中动态加载行为,但这并没有帮助。

如果我遗漏了一些简单的东西,我深表歉意。提前致谢!

4

1 回答 1

1

引用手册:

Containable 必须附加到用于收容的所有模型上,

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

这是该笔记的剩余一半:

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

于 2012-11-20T19:06:53.510 回答