如何在Codeigniter中的视图中使用两个表数据

时间:2015-10-12 12:01:35

标签: php mysql codeigniter codeigniter-2

我有两个表,第一个表是主题名,第二个表是子主题。我想从第一个表主题名称显示然后搜索他们相应的子主题并在视图中显示,依此类推,直到在第一个表中找到主题名称。但问题是我只能在视图中获得一个表数据,即主要主题表。我不知道如何获取两个表的完整数据并使用它。

  

数据库结构:

enter image description here

  

型号:

<?php 

    class Topics_Model extends CI_Model {

    function __construct()
        {
              parent::__construct();
        }

    function get_all_topics()
    {
       $this->load->database();
       $this->db->select("*");
       $this->db->from("topics");
       $query=$this->db->get();
       return $query->result();
    }
    }

&GT;

  

控制器:

<?php

class drag_drop_course_material extends CI_Controller {

  function drag_drop_course_material()
   {
     parent::__construct();
   }

   function index()
    {
     $this->load->model('topics_model');
     $data['query']=$this->topics_model->get_all_topics();
     $this->load->helper('url');
     $this->load->view('drag_drop_course_material', $data);
    }
}

?>

查看:

 <?php
    foreach ($query as $row) {
 ?>
   <li>  $row->topic_name   </li>
 <? }  ?>

必需输出:

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试此查询。我们确实离开了两个表的连接。

$CI->db->select('*');
$CI->db->from('topic');
$CI->db->join('sub-topics', 'topic.id = sub-topics.sub_topic_id', 'left');
$query = $CI->db->get();
$result =  $query->result(); 

您将在模型中获得结果。从模型返回此结果并在控制器中访问它。一旦你在控制器中打印返回结果,你就会知道如何渲染它,因为你已经在上面做过了。

答案 1 :(得分:0)

您的控制器非常完美,您的模型非常完美,只需更改您的视图:

在视图中:

        foreach ($query as $row) 
        { ?>
        <ul>
            <li><?php echo $row['topic_name'];?>
            <ul>
            <?php $this->db->where('sub_topic_id',$row['id'])
            $r = $this->db->get('subtopics');
            if($r->num_rows()>0)
            {
                foreach ($r -> result_array() as $row) {
                $data1[] = $row;
                }
            }
            foreach($data1 as $sub){?>
            //print <li><?php echo $sub['subtopic_name']?></li>
            <? }?>
          </ul>
        </li>
       <? }?>
      </ul>