0

次のコードでは、CakePHP 2.1.2 で期待どおりに Containable が動作していません。

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

マニュアルの引用:

封じ込めに使用されるすべてのモデルには、封じ込め可能なものを取り付ける必要があります。

サンプルコードから、それを行っているかどうかは明確ではありません。

そして、これがそのメモの残りの半分です。

AppModel にアタッチすることを検討してください。

于 2012-11-20T19:06:53.510 に答える