0

我知道我们应该从控制器而不是视图调用模型,但我处于必须这样做的情况

这里是 :

我有一个博客脚本,在每个用户主页中,我想为每个帖子显示 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 还很陌生。在这种情况下正确的方法是什么?

4

2 回答 2

1

我猜你已经为此创建了自己的 MVC 系统,所以我不知道你将如何实现它。我使用 Zend Framework,所以我可以告诉你我将如何使用它。

从视图访问模型本质上没有任何问题,只要它是只读访问,但最好将尽可能多的代码保留在视图脚本之外。为此,在您的情况下,我会使用视图助手,并且在 ZF 中编写您自己的视图助手非常简单。如果你想使用这个方法,我会留给你来适应你的 MVC。

这意味着您可以抽象出从视图脚本中获取注释列表所需的代码,并将其替换为以下内容:-

echo $this->getComments($messageID);
于 2012-05-25T15:50:27.003 回答
1

通常,您会在post模型上有一个方法来获取该帖子的评论。此外,我通常会有一种方法来确保将评论加入到帖子中,这样您就不会为每个帖子发出评论查询。

于 2012-05-25T15:02:37.400 回答