2016-10-20 84 views
1

首先我会尝试解释我的问题。我对codeigniter很陌生,我试图在codeigniter中从数据库中获取结果的下拉菜单。我已经取得了一些经验,但并不像应该那样工作。带数据库的Codeigniter下拉菜单

第一我的模型:

public function get_continents() { 
    $this->db->select('*'); 
    $this->db->from('continents'); 
    $this->db->order_by("continent_name", "asc"); 
    $query = $this->db->get(); 

    if($query->num_rows() > 0) { 
     return $query->result(); 
    } 
    else { 
     return FALSE; 
    } 
} 

public function get_contries() { 
    $this->db->select('*'); 
    $this->db->from('countries'); 
    $this->db->join('continents', 'country_continent_id = continent_id', 'left'); 
    $this->db->where('continent_id', $id); 
    $this->db->order_by('country_name', 'asc'); 
    $query = $this->db->get(); 

    if($query->num_rows() > 0) { 
     return $query->result(); 
    } 
    else { 
     return FALSE; 
    } 
} 

现在控制器:

public function index() { 
    $dados['title'] = 'Places to Visit'; 
    $dados['page'] = 'home'; 

    // lista dos continentes 
    $this->load->model('option_model'); 
    $dados['continent'] = $this->option_model->get_continents(); 

    // lista os paises 
    $dados['country'] = $this->option_model->get_contries(); 

    // chamar a vista -> view 
    $this->load->view('home', $dados); 
} 

和视图:

<nav> 
      <ul> 
       <li><a href="" id="home">Homepage</a></li> 
       <?php foreach ($continent as $row) {; ?> 
        <li> 
         <a href="" id="<?php echo $row->continent_id; ?>"><?php echo $row->continent_name; ?></a> 
         <ul> 
          <?php foreach($country as $row2) {; ?> 
           <li><a href="" id="<?php echo $row2->country_id; ?>"><?php echo $row2->country_name; ?></a></li> 
          <?php }; ?> 
         </ul> 
        </li> 
       <?php } ?> 
       <li><a href="" id="pt">Portugal</a></li> 
      </ul> 
     </nav> 

我想提出的是大陆和每个大洲的菜单有这样的国家下降:

> continent 1 
    - country 1 
    - country 2 
    - ... 
> continent 2 
    - country 1 
    - country 2 
    - ... 
> ... 

我该怎么做? 在此先感谢!

回答

1

你需要使其追加国家每个大陆更新get_continents()功能。

如何做到这一点?

get_continents()

public function get_continents() { 
    $this->db->select('*'); 
    $this->db->from('continents'); 
    $this->db->order_by("continent_name", "asc"); 
    $query = $this->db->get(); 

    if($query->num_rows() > 0) { 

     // Get Countries list for each continent 
     foreach ($query->result() as $row) { 

      $this->db->select('*'); 
      $this->db->from('countries'); 
      $this->db->where('country_continent_id', $row->continent_id); 
      $this->db->order_by('country_name', 'asc'); 
      $country = $this->db->get()->result(); 

      // append country to the continent object 
      $row->country = $country; 

     } 

     return $query->result(); 

    } 
    else { 
     return FALSE; 
    } 
} 

在View:

<nav> 
      <ul> 
       <li><a href="" id="home">Homepage</a></li> 
       <?php foreach ($continent as $row) {; ?> 
        <li> 
         <a href="" id="<?php echo $row->continent_id; ?>"><?php echo $row->continent_name; ?></a> 
         <ul> 
          <?php foreach($row->country as $row2) {; ?> 
           <li><a href="" id="<?php echo $row2->country_id; ?>"><?php echo $row2->country_name; ?></a></li> 
          <?php }; ?> 
         </ul> 
        </li> 
       <?php } ?> 
       <li><a href="" id="pt">Portugal</a></li> 
      </ul> 
     </nav> 

我们做的是以下几点:

  1. get_continents我们的国家对象追加到每个大陆对象。
  2. 看来,我们与$row->country
+0

谢谢=)正在为此,但仍需要一些帮助。 tku,tku,tku ... – eskimopest

0

你的错误是从功能get_contries() 最有可能您具有$this->db->where('continent_id', $id);

删除了这一行,你应该罚款一行。

+0

TKS取代$country嵌套foreach循环您的回复,但为了了解这个国家的大陆我不应该有专门的变量?这是我的问题之一。如果我删除该行,我无法查看哪个国家属于哪个大陆。 – eskimopest

+0

实际上,该行根本不起作用,因为您没有变量名'$ id',因此如果您想使用json构建它,它会搅乱您的查询。 –

+0

我知道它不工作。我必须将一个值传递给该变量,但不知道如何。我的第一个猜测是加入2个功能,但正如我所说我是新的codeigniter。 – eskimopest