-1

我有一个名为 Post 的模型和另一个名为 Comment 的模型,在 Comment 上我有一个名为 post_id 的字段... Post 有很多评论,Comment 属于 post。

我想要列表帖子和下面的评论,在纯 php 中将是这样的:

<?php
foreach ($posts as $post){

 echo "<h3>" .$post['title']. "</h3>";

 $sel = mysql_query("SELECT * FROM comments WHERE post_id =". $post['id']);
 $comments = mysql_fetcha_assoc($sel);

 foreach ($comments as $comment){
  echo "<p>" .$comment['comment']. "<p>";
 }
}
?>

我正在使用 cake 2.x .. 谢谢

4

2 回答 2

2

很抱歉,但如上代码是从 cakephp 数据库中获取数据的错误方法

正如我假设你的模型之间的关系是完美的

所以你可以从简单的find()查询中得到

$this->set('post', $this->Post->find('first', array(
  'conditions'=>array('Post.id'=>$id),
  'contain'=>array('Comment')
)));

这会给你输出像

Array
(
    [Post] => Array
        (
            [id] => 1
            [title] => The title
            [body] => This is the post body.
            [created] => 2007-12-28 13:54:34
            [modified] => 
        )
    [Comment] => Array
        (
            [0] => Array
                (
                    [id] => 1
                    [post_id] => 1
                    [name] => James
                    [email] => info@jamesfairhurst.co.uk
                    [text] => This is a sample comment.
                    [created] => 0000-00-00 00:00:00
                )
            [1] => Array
                (
                    [id] => 2
                    [post_id] => 1
                    [name] => James
                    [email] => info@jamesfairhurst.co.uk
                    [text] => This is another sample comment.
                    [created] => 0000-00-00 00:00:00
                )
        )
)

让我知道我是否可以为您提供更多帮助..

于 2013-05-09T04:06:42.610 回答
1

在您的 PostsController 中,使用查询设置一个变量$postsfind(‘all’)返回一个包含与Post模型相关的所有帖子和记录的对象,您的方法可能类似于:

帖子控制器:

public function view() {
    if (!$this->Post->exists()) {
        throw new NotFoundException(__('Invalid post'));
    }

    $this->set('posts', $this->Post->find('all'));
}

然后在您的视图中,只需遍历 $posts 即可显示标题和相关评论。

帖子/view.ctp:

<?php foreach ($posts as $post): ?>
    <h3><?php echo $post['Post']['title']; ?></h3>
    <?php foreach ($post['Comment'] as $comment):?>
        <p><?php echo $comment['comment'];?></p>
    <?php endforeach;?>
<?php endforeach;?>

请参阅检索数据其他方法和属性

从文档中:

如果exists()没有提供id,则调用Model::getID()获取当前记录id进行验证,然后对当前配置的数据源执行Model::find('count')判断是否存在持久存储中的记录。

如果数据库中不存在记录,您应该总是抛出某种异常。

于 2013-05-09T04:23:56.703 回答