引用自己的CakePHP模型

时间:2013-04-30 20:11:04

标签: php mysql cakephp-2.0 cakephp-appmodel

我有以下情况。我有一个模型引用了一个名为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)中引用此模型,它不会返回子项的数组。只返回问题部分。如何从模型返回的数据取决于您所在的控制器?这种行为似乎很奇怪,我想知道如何从数据库中获取子项。谢谢你的时间。

1 个答案:

答案 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')
    );