带数据库的Codeigniter下拉菜单

时间:2016-10-20 09:13:51

标签: php mysql 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
   - ...
> ...

我该怎么做? 提前谢谢!

2 个答案:

答案 0 :(得分: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;
    }
}

在视图中:

 <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. 在View中,我们使用$country
  3. 替换嵌套的foreach循环中的$row->country

答案 1 :(得分:0)

您的错误很可能来自函数get_contries() 你有一行$this->db->where('continent_id', $id);

删除该行,你应该没事。