1

我有两个模型。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 列的帖子表和评论表。在 PostController 类中,当我使用此命令获取记录时:

$this->set('post',$this->Post->findById($id)); 

并调试 $post 数组我看到了这个数组:

array(
'Post' => array(
    'id' => '4',
    'title' => 'روز اول دانشگاه',
    'body' => 'سلام. روز اول بود که اومده بودیم '
    'created' => '2012-11-11 21:49:48',
    'modified' => null
)
)

我希望 [comment] 行在此数组中,但没有。

我搜索网络调试我的应用程序,但我无法解决这个问题。!!!!!!

注意:cakephp 版本是 2.2.3 稳定版

4

2 回答 2

2

您的模型命名不正确。PostModel 应该是带有 posts 表的 Post,CommentModel 应该是带有 comments 表和 post_id 的 Comment。此外,这不起作用,因为您已告诉您的 Comments 模型在帖子表上查找“post_id”作为外键。这对于 Posts hasMany Comments 关系是不正确的,并且由于该列不存在,它将会失败。如果您遵循Models 的约定,则实际上不需要将任何内容传递到数组中。ORM 会解决的。

class Post extends AppModel {
    public $hasMany = array('Comment');
}
class Comment extends AppModel {
    public $belongsTo = array('Post');
}
于 2012-11-20T06:42:30.013 回答
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”。

于 2012-11-19T10:33:52.140 回答