【问题标题】:multilevel menu with codeigniter带有 codeigniter 的多级菜单
【发布时间】:2011-11-08 17:50:29
【问题描述】:

我正在尝试创建一个多级列表。我有两个表“州”和“城市”。 city 表有一个外键“state_id”,它是“State”表的主键。我想展示每个州,每个州下都有多个城市。但是当我运行我的代码时,只显示数据库中最后存储的状态及其下的城市。我希望 Db 中的所有州和与其对应的城市都出现。

我的控制器的一部分:

function index(){
    $result = $this->db->count_all('state');

    $id=1;
    while ($id<=$result){
        $data ['state'] = $this->state_model->stateid($id);  
        $data['city']=$this->state_model->statec($id);
        $id++;
    } 
    $this->load->view('state_view',$data);
}

型号:

function stateid($id = 0){
    $this->db->where('id',$id);

    $sql = $this->db->get('state');

    return $sql->result();
}

function statec($id = 0){
    $this->db->where('state_id',$id);

    $sql = $this->db->get('city');

    return $sql->result();
}

观点:

<?php foreach($state as $row):?>
    <h4><?php echo $row->statename;?></h4>
    <?php foreach($city as $row):?>
        <?php echo $row->cityname; ?></br></br></br>
    <?php endforeach;?></br></br>
<?php endforeach;?></br></br>

【问题讨论】:

    标签: php codeigniter while-loop


    【解决方案1】:

    那是因为在那个时候,每次迭代都会覆盖 $data['state'] 和 $data['city']... 所以只有最后一次迭代会被发送到视图。

    您应该更多地研究什么数组,尤其是多维数组,以及如何使用它们。

    话虽如此,您还有更大的问题需要考虑。就像代码优化得很糟糕,以后会出现问题。就像你的代码假设状态表中的 id 是连续的,这不一定是真的。

    这是您的代码应该是什么样子的粗略想法:

    型号

    function get_cities(){
    
      $states = $this->db->get('state');
    
      foreach ($states->result() as $state){
        $cities = $this->db->get_where('city', array('state_id', $state->id));
        $state->cities = $cities->result();
      }
    
      return $states;
    }
    

    控制器

    function index(){
      $this->load->model('state_model);
      $data['states'] = $this->state_model->get_cities();
      $this->load->view('states/index, $data);
    }
    

    视图:

    <?php foreach($states as $state):?>
      <h4><?php echo $state->statename;?></h4>
      <?php  foreach($state->city as $city):?>
        <?php echo $city->cityname; ?>
      <?php endforeach;?>
    <?php endforeach;?>
    

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      • 2014-01-14
      • 2018-07-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多