многоуровневое меню с codeigniter

Я пытаюсь создать многоуровневый список. У меня есть две таблицы «Штат» и «Город». Таблица городов имеет внешний ключ 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>

person martan    schedule 08.11.2011    source источник


Ответы (1)


Это связано с тем, что в это время с каждой итерацией вы перезаписываете $data['state'] и $data['city']... поэтому в представление отправляется только последняя итерация.

Вам следует больше узнать о том, какие массивы и особенно многомерные массивы работают и как их использовать.

При этом у вас есть более серьезные проблемы для рассмотрения. Мол, код очень плохо оптимизирован и потом вызовет проблемы. Как и ваш код, предполагается, что идентификаторы в таблице состояний являются последовательными, что не обязательно верно.

Вот примерное представление о том, как должен выглядеть ваш код:

модель

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;?>

Удачи

person Dan F.    schedule 08.11.2011