我正在尝试创建一个多级列表。我有两张桌子'State'和'City'。 city表有一个外键'state_id',它是'State'表的主键。我想显示每个州和每个州下面有多个城市。但是当我运行我的代码时,只有db中的最后一个存储状态和它下面的城市出现。我希望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>
答案 0 :(得分:0)
那是因为在那个时候,每次迭代都会覆盖$ 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;?>
祝你好运