我有一个名为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 ..谢谢
答案 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 data和Additional methods and properties
来自文档:
如果id没有提供exists(),则调用Model :: getID() 获取要验证的当前记录ID,然后执行 对当前配置的数据源建模:: find('count') 确定持久存储中记录的存在。
如果数据库中不存在任何记录,则应始终抛出某种异常。