【问题标题】:CakePHP model that references itself引用自身的 CakePHP 模型
【发布时间】:2013-04-30 20:11:04
【问题描述】:

我有以下情况。我有一个模型引用名为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)));

这正是我想要的。我返回了一个包含问题及其子项的数据数组。对于具有父问题parent_id 的问题,以$test_question['Questions'] 访问问题$test_question['Children']。我不明白的是,如果我在另一个控制器(如Tests)中引用此模型,它不会返回子数组。只返回问题部分。从模型返回的数据如何取决于您所在的控制器?这种行为似乎很奇怪,我也想知道如何从数据库中获取孩子。感谢您的宝贵时间。

【问题讨论】:

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

标签: php mysql cakephp-2.0 cakephp-model


【解决方案1】:

“类名”键必须与模型类名匹配,它不是任意的。所以:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多