我有两个型号。 PostModel& CommentModel。
我在这些类中定义了两个关系。
<?php
class PostModel extends AppModel {
var $name = 'Post';
var $hasMany = array(
'Comment' => array(
'className' => 'Comment',
'foreignKey' => 'post_id'
)
);
}
?>
和
<?php
class CommentModel extends AppModel {
var $name = 'Comment';
var $belongsTo = array(
'Post' => array(
'className' => 'Post',
'foreignKey' => 'post_id'
)
);
}
?>
并且在数据库中我有post_id列的post表和comments表。 在PostController类中,当我使用此命令获取记录时:
$this->set('post',$this->Post->findById($id));
和debug $ post数组我看到这个数组:
array(
'Post' => array(
'id' => '4',
'title' => 'روز اول دانشگاه',
'body' => 'سلام. روز اول بود که اومده بودیم '
'created' => '2012-11-11 21:49:48',
'modified' => null
)
)
我希望[comment]行在这个数组中,但没有。
我搜索网络调试我的应用程序,但我无法解决这个问题。!!!!!
注意:cakephp版本是2.2.3稳定的
答案 0 :(得分:2)
您的模型名称不正确。 PostModel应该是post和post表,CommentModel应该是Comment,其中包含一个comments表和一个post_id。此外,这是行不通的,因为你已经告诉你的评论模型在posts表上寻找一个'post_id'作为外键。对于Posts hasMany Comments关系,这是不正确的,并且由于该列不存在,它将失败。如果您遵循the convention for Models,则实际上不需要将任何内容传递给数组。 ORM会弄明白。
class Post extends AppModel {
public $hasMany = array('Comment');
}
class Comment extends AppModel {
public $belongsTo = array('Post');
}
答案 1 :(得分:1)
你使用可容纳的吗?如果没有,那就这样做吧!
public $ actsAs = array('Containable');
在您的模型中
然后
$this->Post->find('first', array(
'conditions' => array('Post.id'=>$id),
'contain' => array('Comment'));
你应该像Dave指出的那样重命名模型。所以只需“Post extends AppModel”(Post.php)和“Comment extends AppModel”(Comment.php)来遵循惯例。
PS:然后您可以从模型中删除“var $ name”。同时从php文件中删除结束?>
。最后但并非最不重要的是将所有剩余的“var”重命名为“public”。