2013-04-30 44 views
1

我有以下情况。我有一个模型引用一个名为questions的数据库表。问题表包含一个称为parent_id的关键参考,所以问题可以有一个父项。该父母是同一张表中的问题记录。这是因为有些问题实际上是一组最终用户需要一起看的问题。引用自己的CakePHP模型

我曾尝试这种行为在我的数据库模型如下:

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['Children'],以$test_question['Questions']的形式访问父问题的parent_id。我不明白的是,如果我在另一个控制器(如Tests)中引用此模型,它不会返回儿童的数组。只有问题部分被返回。从模型返回的数据如何依赖于您所在的控制器?这种行为看起来很奇怪,我想知道如何从数据库中获取孩子。感谢您的时间。

+0

@teresko这一定是喜欢你已经编辑我的一个问题是第三次。你在这里编辑了什么? – usumoio 2013-04-30 20:14:01

+3

我删除了“mvc”标签并添加了“cakephp-appmodel”标签。首先,因为CakePHP没有实现MVC,也没有任何其他MVC模式。它实际上只是模仿(有点糟糕)PHP的Rails设置。而你的问题实际上是关于CakePHP框架中的'AppModel'结构,它是[Active Record](http://www.martinfowler.com/eaaCatalog/activeRecord.html)实现。 – 2013-04-30 20:30:54

+0

@IamJohnGalt:你可以通过点击上次编辑的时间(http://i.imgur.com/Hbk1P3I.png) – 2013-04-30 20:33:01

回答

2

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