模型关联无法正常工作

时间:2012-11-19 10:08:37

标签: cakephp associations cakephp-2.0

我有两个型号。 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稳定的

2 个答案:

答案 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”。