繁体   English   中英

Codeigniter / PHP - 在同一视图中显示两个相关查询的结果,博客应用程序

[英]Codeigniter/PHP - Displaying results of two related queries in same view, blog app

我是PHP和Codeigniter(v2.0)框架的新手。 希望你能帮我找到我的第一个webapp。 详情如下,并提前感谢您!

目标/问题摘要:我想在我的视图中显示附加到每个特定blog_Post的所有blog_Comments。

详细信息:我的blog_Posts表包含所有原始博客帖子[id(int),title,entry,author(all varchar)和date(timestamp)]。 我的blog_Comments表[id(int),entry_id(int),author,comment(varchar)]包含所有注释; 它们通过* entry_id *属性与原始blog_Post相关联。

控制器:

$query1 = $this->blog_model->get_posts();
$query2 = $this->blog_model->get_comments();
$data = array();
$data['posts'] = $query1;
$data['comments'] = $query2;

模型:

function get_posts() {
$query = this->db->get('blog_Posts');
return $query->result;
}

function get_comments() {
$query = this->db->get('blog_Comments');
return $query->result;}

视图:

<?php if(isset($posts)) : foreach($posts as $posts=>$row) : ?>
     <?php $row->title; ?>
     <?php $row->author; ?>
     <?php $row->entry; ?>

<?php foreach($comments as $comments=>$com) : ?>
    <?php if($com->entry_id == $row->id) : ?>
        <p>author: <?php echo $com->author; ?></p>
        <p>comment: <?php echo $com->comment; ?></p>
    <?php endif; ?>
<?php endforeach; ?>

<?php endforeach; ?>
<?php else : ?> <p>no blog_Posts found</p>
<?php endif; ?>

编辑/更新:

我试图显示注释被粘贴到上面的视图代码块中,我还列出了它给我的两个问题。 现在我有2个原始博客文章样本,以及与每个帖子相关的评论。

问题:

  1. 第一个博客条目(第一次循环)它显示所有评论,包括与其他entry_id相关的评论。
  2. 第二个博客条目(第二次循环),它抛出以下错误:“为foreach()提供的参数无效”,并指向我视图中包含$ comments的foreach的行。

简而言之,我正试图仅使用与原始帖子“id”匹配的entry_id来发布这些评论。

再次感谢您的帮助和时间。

-AJ

好吧,因为你不需要一次显示所有评论,你可以改变你的get_comments函数,如下所示返回每个帖子的评论,当然按照你的方式显示它们,按创建日期排序,最后一个条目等:

所以对于模型部分:

function get_comments($post_id){
$query = $this->db->query("select * from `blog_Comments` where `entry_id` = $post_id ORDER BY `created_on` DESC");

  if($query->num_rows() != 0){
   return $query->result();
 }else{
   return false;
 }
}

并在您的视图文件中:

foreach($posts as $row){
 echo 'Title: ' . $row->title .
 'Author: ' . $row->author .
 'Entry:' . $row->entry;
 $comments = $this->blog_model->get_comments($row->id);
 if(!$comments){ 
  echo 'No comments'; 
 }else{
  foreach($comments as $com){
    echo $com->comments . '<br/>' . $com->user . '<br/>' . etc etc
  }
 }
}

我懒得测试,但我认为你试图使用$ row,但你不在它定义的foreach之外。 你在这里介绍$ row

 <?php if(isset($posts)) : foreach($posts as $posts=>$row) : ?>

然后你关闭了foreach - 所以$ row在这里不再可用:

   <?php if($com->entry_id == $row->id); ?>

是的。 实际上你应该在控制器和模型中做尽可能多的逻辑和检查。 验证您的数据对象 - 如帖子 - 然后控制器确定正确的视图。 那么如果没有任何帖子可以显示 - 如果您的视图中没有帖子的条件,那么你就不会有什么混乱'。 你只需要调用无帖子视图文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM