Containable を使用して、関連付けられたいくつかのモデル (およびそれらのデータ配列) を含むモデルを返そうとしています。モデルはテスト結果を扱います。モデルは次のとおりです。
モデル:
Question : has and belongs to many Category
Category : has and belongs to many Question
Attempt : has many AttemptedQuestions
AttemptedQuestion : belongs to Question
すべての AttemptedQuestions とそれに対応する Quesions + Categoryを含む Attempt を返したい
基本的に、関係は次のようにマッピングされます。
Attempt => AttemptedQuestion(s) => Question => Category
HABTM 関係のために、Cake は次のような復帰を望んでいると思われます。
Attempt => AttemptedQuestion(s) => array( Question, Category )
<-- カテゴリは Question 配列に含まれていませんが、姉妹です。これでもいいです。
現時点では、カテゴリをまったく表示できません。コントローラー内で行っていることは次のとおりです (結果にカテゴリが表示されるわけではありません)。
$this->Attempt->contain(array('AttemptedQuestion' => array('Question'=>'Category')));
$attempt_to_be_graded = $this->Attempt->findById( $attempt_id );
私は何を間違っていますか?
更新 @nunser からの回答に基づくリビジョンです。これも機能しません。
$this->Attempt->contain(array('AttemptedQuestion' => array('Question'=>array('Question'=>array('Category') ))));
$attempt_to_be_graded = $this->Attempt->findById($attempt_id );
返されるデータは次のようになります。
array(
'Attempt' => array(
'id' => '39',
...
),
'AttemptedQuestion' => array(
(int) 0 => array(
'id' => '189',
...,
'Question' => array(
'id' => '165',
...
)
),
(int) 1 => array(
'id' => '188',
...,
'Question' => array(
'id' => '164',
...
)
)
)
)
更新 2
私はまだこれに苦労していますが、次のようにすべてのカテゴリのリストが期待どおりに返されるため、関連付けは正しい必要があると思います。
$categories = $this->Attempt->AttemptedQuestion->Question->Category->find('all');
アップデート 3
$this->Question->find('first')
コード全体のさまざまなポイントからの結果をテストすることで、この問題の範囲を絞り込みました。結果は、この後まで期待されるようです: $test = $this->Test->findById($test_id);
。
これを示すコードは次のとおりです。
$this->loadModel('Question');
$test = $this->Question->find('first');
debug($test);
//THESE RESULTS INCLUDE Category DATE
$test = $this->Test->findById($test_id);
$this->loadModel('Question');
$test = $this->Question->find('first');
debug($test);
exit;
//THESE RESULTS DO NOT INCLUDE Category DATE
そのため、私が完全に理解していない理由により、介在することでTest->find()
、後でカテゴリ データが表示されないように思われます。変でしょ?