многоуровневое меню с кодигнитором - PullRequest
0 голосов
/ 08 ноября 2011

Я пытаюсь создать многоуровневый список. У меня есть две таблицы «Штат» и «Город». Таблица города имеет внешний ключ «state_id», который является первичным ключом таблицы «State». Я хочу показать каждый штат и под каждым штатом есть несколько городов. Но когда я запускаю свой код, отображается только последнее сохраненное состояние в БД и города под ним. Я хочу, чтобы все штаты в БД и города соответствовали этому.

Часть моего контроллера:

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>

1 Ответ

0 голосов
/ 08 ноября 2011

Это потому, что в то время как при каждой итерации вы перезаписываете $ 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;?>

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...