我有以下情况。我有一个模型引用了一个名为questions
的数据库表。问题表包含一个名为parent_id
的关键引用,因此问题可以包含父项。此父级是同一个表中的问题记录。这是因为有些问题实际上是最终用户需要一起看的问题。
我试图在我的数据库中对此行为进行建模,如下所示:
public $hasMany = array(
'AttemptedQuestions' => array( 'classname' => 'AttemptedQuestions' ),
'Questions' => array('className'=>'Questions', 'foreignKey'=>'parent_id')
);
编辑:所以奇怪的是,在问题控制器中,我可以很好地引用我的数据,如下所示:
$test_question = $this->Question->find('all', array('conditions' => array('id' => 25)));
这将完全符合我的要求。我返回了一个包含问题及其子项的数据。对于问题$test_question['Questions']
,请访问$test_question['Children']
,以查找包含父问题parent_id
的问题。我不明白的是,如果我在另一个控制器(如Tests
)中引用此模型,它不会返回子项的数组。只返回问题部分。如何从模型返回的数据取决于您所在的控制器?这种行为似乎很奇怪,我想知道如何从数据库中获取子项。谢谢你的时间。
答案 0 :(得分:2)
'classname'键必须与模型类名匹配,它不是abritrary。所以:
class Question extends AppModel {
public $hasMany = array(
'ChildQuestion' => array('className'=>'Question', 'foreignKey'=>'parent_id')
);
}
$ hasMany数组键(即“ChildQuestion”)可以是任意的;这将出现在结果中。
奖励:如果您需要获得儿童问题的父母,请添加:
public $belongsTo= array(
'ParentQuestion' => array('className'=>'Question', 'foreignKey'=>'parent_id')
);