Codeigniter:试图在视图的循环中运行查询


Codeigniter: Trying to run a query within a loop in the View

我有一个显示帖子的页面,我想在每个帖子旁边获得作者的名字。有一个用于页面的DB表(有一个名为titleauthor的列)和一个用于作者的DB表,有一个列名为idauthor

控制

function pages() {
  // QUERIES
  $pages_query = $this->db->get('table_pages');
  $authors_query = $this->db->get_where('table_authors', array('id =' => $row->author));
  // DATA
  $data['pages'] = $pages_query;
  $data['authors'] = $authors_query;
  // CREATE
  $this->load->view('admin_pages', $data);
}

查看

    <? foreach ($pages->result() as $row): ?>
         Title: <?=$row->title?>, by <?=$authors['id']?><br />
    <? endforeach; ?>

我认为我的问题是根据控制中的id给作者打电话,但我似乎就是想不通。

基本上,你想JOIN这两个表,所以你可以直接访问作者的名字,你不需要使用两个查询。。。

你想做一些类似的事情:

function pages() {
    // QUERIES
    $this->db->join('table_authors', 'table_pages.table_authors_id = table_authors.id');
    $pages_query = $this->db->get('table_pages');
    // DATA
    $data['pages'] = $pages_query;
    // CREATE
    $this->load->view('admin_pages', $data);
}

查看

<? foreach ($pages->result() as $row): ?>
     Title: <?=$row->title?>, by <?=$row->table_authors_name?><br />
<? endforeach; ?>

您可能需要调整一些列名,因为我不知道您的数据库结构。如果table_pages和table_author都包含nametitle字段,则必须重命名查询中的列。你可以使用

$this->db->select('table_authors.title AS author_name, ...');

您可以用一种非常简单的方法来完成这项工作,只需编写查询,获取数据并将其传递给视图加载函数。

  For controller you can write like this
       function pages() {
   $pages_query = $this->db->query("SELECT * FROM table_authors as a INNER JOIN table_pages as p ON a.id=p.table_authors_id");
   // DATA
   $data['pages'] = $pages_query->result_array();

  // CREATE
  $this->load->view('admin_pages', $data); // Passing the data to the view loading function.
   }

 For Views You can write like this.
    <?php
    foreach($pages as $page):
    echo "Title: ".$page['title'].", by ".$page['table_authors_id'];
    endforeach; 
    ?>