CakePHP 2.0 - 2.1,从控制器查询不同的模型

时间:2012-04-11 14:50:35

标签: php mysql cakephp-2.0 cakephp-2.1

我有一个处理视频文件格式的上传控制器。在上传控制器中,您可以浏览上传的所有视频并观看它们。在函数监视器中,我有一个comments元素,用userid更新评论表(当前登录的用户留下的评论)uploadid(当前正在监视的上传)和评论(用户的评论)。

我已经完美地运行了表单,但是我不确定如何从评论表中获取信息,例如要实现的必要查询?

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我看到你的另一篇文章CakePHP Elements not updating table,所以我对你的情况有所了解。您似乎正在使用Post模型表示评论。

你想在你的UploadsController中查询你的Post模型中的数据,对吗?

如果您的评论表名为comments,则需要确保它与您的帖子模型相关联。如果模型和数据库表遵循Cake的命名约定,它会自动关联它们。但如果它们实际上不同,您可以为Post模型指定自定义数据库表:

<?php
class Post extends AppModel {

    var $useTable = "comments" /*Or whatever you named your comments table*/

    ...
}
?>

您还必须确保在发布和上传之间设置模型关联:

Post belongsTo Upload
Upload hasMany Post

我注意到你有:

Post belongsTo Upload
Upload hasAndBelongsToMany Post

有没有理由说它是HABTM? HABTM意味着同一个帖子可以属于许多不同的上传。 hasMany暗示Post只能属于单个Upload。

最后,现在已经建立了模型关联,您可以访问控制器中的相关模型:

<?php
class UploadsController extends AppController {

    ...

    function watch ($id = null) {

        $this->Upload->id = $id;      
        $this->set('uploads', $this->Upload->read());

        /* To get related comments (Posts) */
        $related_comments = $this->Upload->Post->find('all', array(
            'conditions' => array(
                'Upload.id' => $id /* This condition makes it so only associated comments are found */
            )
        ));
        $this->set('comments', $related_comments);
    }

    ...

 }
 ?>