You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:
    $config['display_errors'] = TRUE;
    $config['log_threshold'] = 1;
    
    页面会显示Undefined index、语法错误等信息,快速定位问题。

内容的提问来源于stack exchange,提问作者ixxans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:40:33