Cakephp找到了一个foreach

时间:2013-05-09 03:10:52

标签: php cakephp cakephp-2.0

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

我想要列表帖子以及下面的评论,纯粹的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>";
 }
}
?>

我正在使用蛋糕2.x ..谢谢

2 个答案:

答案 0 :(得分: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
                )
        )
)

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

答案 1 :(得分:1)

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

PostsController:

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;?>

请参阅Retrieving your dataAdditional methods and properties

来自文档:

  

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

如果数据库中不存在任何记录,则应始终抛出某种异常。