2016-10-20 113 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