CI3视图中Foreach循环无法正常显示问题求助
CI3视图foreach循环无内容排查方案
问题场景
在CodeIgniter3视图中使用foreach遍历$node数据,但页面未显示循环内容;已确认数据库存在对应数据,模型QueryBuilder生成的SQL在phpMyAdmin执行正常。
相关代码
视图代码(setting/rulenode.php)
<div class="content-wrapper"> <section class="content"> <div class="row"> <?php foreach ($node as $d) { ?> <div class="col-lg-6 col-md-6 col-xs-6"> <div class="box box-device box-solid" id="device_<?php echo $d['id_device']; ?>"> <div class="box-header"> <div class="row"> <div class="col-sm-3 col-xs-3"> <button aria-pressed="false" data-device="<?php echo $d['id_device']; ?>" class="btn btn-onoff btn-sm btn-toggle<?php echo ($d['status_device'] == 1) ? ' active': ''; ?>" data-toggle="button" type="button"> <div class="handle"></div> </button> </div> <div class="col-sm-9 col-xs-9"> <h3 class="box-title<?php echo ($d['rule'] == 0) ? ' notactive': ''; ?>"><?php echo $d['nama_device']; ?></h3> </div> </div> </div> <div class="box-body text-center" onclick="window.location.href = '<?php echo site_url('Setting/rule/' . $d['id_device']); ?>'"> <img alt="<?php echo $d['nama_device']; ?>" src="<?php echo base_url('uploads/device/' . $d['foto']); ?>" /> <h4><?php echo $d['nama_device']; ?></h4> <p><?php echo $d['id_device']; ?></p> </div> <div class="box-footer"> <a class="btn btn-default btn-block btn-lg btn-detail" href="<?php echo site_url('Setting/rule/' . $d['id_device']); ?>">View Rule</a> </div> </div> </div> <?php } ?> </div> </section> <?php $this->load->view('components/version'); ?> </div>
控制器代码(Setting.php)
public function rulenode() { $this->data['sub_title'] = 'Setting - Rule'; $this->load->model('Mrule'); $this->data['node'] = $this->Mrule->device(); $this->load->view('setting/rulenode', $this->data); }
模型代码(Mrule.php)
public function device() { $this->db->select('id_device, nama_device, foto, status_device'); $this->db->from('tb_device'); $this->db->join('arduino_rule', 'id_device = id_node'); return $this->db->get()->result_array(); // var_dump($this->db->last_query()); }
排查步骤
1. 验证数据传递有效性
在控制器中添加调试代码,确认模型返回的数据是否正确传递到视图:
public function rulenode() { $this->data['sub_title'] = 'Setting - Rule'; $this->load->model('Mrule'); $this->data['node'] = $this->Mrule->device(); // 调试:打印数据并终止执行 var_dump($this->data['node']); exit; $this->load->view('setting/rulenode', $this->data); }
- 如果打印结果为空数组,问题出在模型查询;如果有数组数据,再排查视图逻辑。
2. 修正JOIN类型与字段缺失问题
- JOIN类型问题:CI3默认
join()为INNER JOIN,仅返回两张表匹配的记录。若部分设备无对应规则(arduino_rule无匹配id_node),这些设备会被过滤,需改为LEFT JOIN保留所有设备记录。 - 字段缺失问题:视图中用到
$d['rule'],但模型select未包含该字段,会触发PHP警告,需补充字段。
修改后的模型代码:
public function device() { // 补充rule字段,匹配视图中的使用 $this->db->select('id_device, nama_device, foto, status_device, arduino_rule.rule'); $this->db->from('tb_device'); // 指定LEFT JOIN,保留tb_device的所有记录 $this->db->join('arduino_rule', 'id_device = id_node', 'LEFT'); return $this->db->get()->result_array(); }
3. 检查视图变量与语法错误
- 确认视图中
foreach ($node as $d)的$node与控制器传递的变量名完全一致(CI3变量名区分大小写)。 - 开启CI3错误提示,排查PHP语法错误:
修改application/config/config.php:
页面会显示Undefined index、语法错误等信息,快速定位问题。$config['display_errors'] = TRUE; $config['log_threshold'] = 1;
内容的提问来源于stack exchange,提问作者ixxans
相关产品推荐
相关产品推荐

