引用自身的CakePHP模型

引用自身的CakePHP模型,php,mysql,cakephp-2.0,cakephp-model,Php,Mysql,Cakephp 2.0,Cakephp Model,我有以下情况。我有一个模型,它引用了一个名为questions的数据库表。“问题”表包含一个名为父项\u id的关键参考,因此问题可以有父项。此父项是同一表中的问题记录。这是因为一些问题实际上是最终用户需要一起查看的一组问题 我已尝试在我的数据库中对此行为建模,如下所示: public $hasMany = array( 'AttemptedQuestions' => array( 'classname' => 'AttemptedQuestions' ), '

我有以下情况。我有一个模型,它引用了一个名为
questions
的数据库表。“问题”表包含一个名为
父项\u 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\u question['Questions']
访问问题
$test\u question['Children']
,访问具有父问题
父问题id的问题。我不明白的是,如果我在另一个控制器(如
Tests
)中引用此模型,它不会返回子数组。只返回问题部分。从模型返回的数据如何依赖于您所在的控制器?这种行为似乎很奇怪,我也想知道如何从数据库中获取孩子。谢谢您的时间。

classname键必须与模型classname匹配,它不是一个库。因此:

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

@这一定是你第三次编辑我的问题了。您在这里编辑了什么?我删除了“mvc”标记并添加了“cakephp appmodel”标记。首先,因为CakePHP既没有实现MVC,也没有实现任何其他受MVC启发的模式。它实际上只是模仿了(有点糟糕)PHP的Rails设置。您的问题实际上是关于CakePHP框架中的
AppModel
结构,这是一个实现。@IamJohnGalt:您可以通过单击上次编辑的时间()@tereško查看修订历史,这听起来像是一个主观意见。一个是基于个人对不喜欢CakePHP的偏见。我认为CakePHP是MVC的有效实现。是什么让你不相信?这与信念无关。请研究一下MVC模式,然后与CakePHP销售的“MVC框架”进行比较。如果您不知道从哪里开始,可以从查找控制器的职责开始(试试维基百科)。