我正在尝试使用 Containable 返回具有多个关联模型(以及那些数据数组)的模型。模型处理测试结果。以下是模型:
楷模:
Question : has and belongs to many Category
Category : has and belongs to many Question
Attempt : has many AttemptedQuestions
AttemptedQuestion : belongs to Question
我想返回一个包含所有 AttemptedQuestions及其相应的问题 + 类别的尝试
所以基本上,关系图是这样的:
Attempt => AttemptedQuestion(s) => Question => Category
我怀疑由于 HABTM 关系,Cake 更愿意返回:
Attempt => AttemptedQuestion(s) => array( Question, Category )
<-- 类别不包含在 Question 数组中,而是姐妹。这也很好。
目前,我根本无法让 Category 出现。这是我在控制器中所做的事情(这不会导致类别出现在结果中):
$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()
似乎阻止了类别数据随后出现。很奇怪吧?