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

Php Codeigniter:尝试在视图中的循环内运行查询,php,codeigniter,codeigniter-2,Php,Codeigniter,Codeigniter 2,我有一个显示帖子的页面,我想在每个帖子旁边找到作者的名字。有一个用于页面的DB表(一列名为title和author),还有一个用于作者的DB表(一列名为id和author) 控制 function pages() { // QUERIES $pages_query = $this->db->get('table_pages'); $authors_query = $this->db->get_where('table_authors', array('id =

我有一个显示帖子的页面,我想在每个帖子旁边找到作者的名字。有一个用于页面的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);
}
看法


标题:,作者

我认为我的问题在于根据控制中的id调用作者,但我似乎无法理解。

基本上,您希望
连接这两个表,这样您就可以直接访问作者姓名,而不需要使用两个查询

您希望执行以下操作:

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);
}
看法


标题:,作者
您可能需要调整一些列名,因为我不知道您的数据库结构。如果table_页面和table_作者都包含
name
title
字段,则必须重命名查询中的列。您可以使用


$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; 
    ?>
对于控制器,您可以这样编写
功能页(){
$pages\u query=$this->db->query(“从表中选择*作者作为内部联接表”\u pages作为p ON a.id=p.table\u作者\u id”);
//资料
$data['pages']=$pages\u query->result\u array();
//创造
$this->load->view('admin_pages',$data);//将数据传递给视图加载函数。
}
对于视图,您可以这样编写。

我认为您需要联接表,表页面中是否有作者id列?谢谢。这对我有用。JOIN Active Record类在CI站点上没有很好的文档,我一直在尝试避免使用在线查询作为实践。Active Record类只不过是一组编写SQL查询的包装器。如果您不确定如何使用活动记录执行某些操作,请尝试了解如何使用纯SQL执行。更好地理解(我的)SQL将对您大有帮助!
<? foreach ($pages->result() as $row): ?>
     Title: <?=$row->title?>, by <?=$row->table_authors_name?><br />
<? endforeach; ?>
  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; 
    ?>