我知道我们假设从控制器调用模型而不是视图,但我遇到的情况是我必须这样做
这里是:
我有一个博客脚本,在每个用户主页中我想为每个帖子显示10篇帖子和5条评论
所以我的控制器看起来像
function get_posts($user_id){
$blog_model = $this->load->model('bloging');
$posts = $blog_model->get_user_posts();
$this->load->view('blog' , $posts )
}
每篇文章都有很多评论 所以我必须得到它们
所以在我看来我有
foreach($posts->result() as $p ){
echo $p->comment;
/// getting comments
$comment_model = $this->load->model('comments');
$co = $comment_model->get_post_comments($p->id);
foreach($co as $co )
echo $co->comment;
//////
}
我现在这样不起作用,因为我必须使用帮助器或库或在模型中使用静态方法来执行此操作(我使用codeigniter,它可能与其他框架工作不同)
但我有什么选择?
我可以在控制器中执行此操作,在获取帖子后使用foreach循环并获取每个帖子评论,将所有评论放入二维数组($c_array[post_id][it's comments array]
)
将他们发送到带有帖子的视图,并在每个帖子的视图中查看数组中的评论和.......
但它接缝复杂,冗余且较慢
我已经在帖子查询上有4个连接,在评论查询上有2个连接,如果我加入这两个,那将是7个
并且两个查询中的select有不同的限制 我对mvc很新。在这种情况下,正确的方法是什么?
答案 0 :(得分:1)
通常情况下,post
模型上会有一个方法来获取该帖子的评论。另外,我通常会有一种方法来确保评论已加入帖子中,因此您不会为每个帖子发出评论查询。
答案 1 :(得分:1)
我猜你已经为此创建了自己的MVC系统,所以我不知道你将如何实现它。我使用Zend Framework,所以我可以告诉你如何使用它。
从视图中访问模型没有任何内在错误,只要它是只读访问权限,但最好从视图脚本中保留尽可能多的代码。为此,在您的情况下,我会使用view helper并且writing your own view helper在ZF中非常简单。如果你想使用这种方法,我会留给你调整你的MVC。
这意味着您可以抽象出从视图脚本中获取注释列表所需的代码,并将其替换为: -
echo $this->getComments($messageID);