Codeigniter:尝试在View中的循环内运行查询

时间:2012-03-30 09:32:52

标签: php codeigniter codeigniter-2

我有一个显示帖子的页面,我想在每个帖子旁边找到作者的姓名。有一个用于页面的数据库表(带有一个名为 title 作者的列)和一个用于作者的列表(带有一个名为 id 作者)。

控制

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调用作者,但我似乎无法弄明白。

2 个答案:

答案 0 :(得分:1)

基本上,您希望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_authors都包含nametitle字段,则您必须重命名查询中的列。您可以使用

执行此操作

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

答案 1 :(得分:0)

您可以通过非常简单的方式执行此操作,只需编写查询,获取数据并将其传递给视图加载函数。

  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; 
    ?>