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

CodeIgniter3结合Bootstrap4模态框无法展示两张关联表多行数据求助

解决方案

1. 修正模型层关联查询逻辑

  • 禁止使用row()方法获取查询结果,该方法仅会返回第一条匹配数据,必须改用result()或result_array()获取指定id_kegiatan对应的全部关联数据
  • 参考代码示例:
// 错误写法(仅返回单条数据)
public function get_rekomendasi_by_kegiatan_id($id_kegiatan) {
    return $this->db->get_where('tbl_rekomendasi_pit', ['id_kegiatan' => $id_kegiatan])->row();
}

// 正确写法(返回全部匹配的关联数据)
public function get_rekomendasi_by_kegiatan_id($id_kegiatan) {
    return $this->db->get_where('tbl_rekomendasi_pit', ['id_kegiatan' => $id_kegiatan])->result_array();
}

2. 调整控制器层返回逻辑

  • 若通过AJAX加载模态框内容,需将查询到的多条数据组装后返回,不要沿用单条数据的返回结构
  • 参考代码示例:
public function get_detail_kegiatan($id_kegiatan) {
    $data['kegiatan'] = $this->model_kegiatan->get_by_id($id_kegiatan);
    // 获取全部关联的rekomendasi数据
    $data['rekomendasi'] = $this->model_rekomendasi->get_rekomendasi_by_kegiatan_id($id_kegiatan);
    // AJAX请求返回JSON
    if ($this->input->is_ajax_request()) {
        echo json_encode($data);
        exit;
    }
    // 非AJAX请求直接传给视图
    $this->load->view('detail_modal', $data);
}

3. 调整视图层模态框渲染逻辑

  • 不要硬编码单条数据的展示位置,对返回的多条rekomendasi数据做循环渲染
  • 前端JS渲染参考:
// AJAX请求成功回调示例
$.ajax({
    url: "<?= base_url('kegiatan/get_detail_kegiatan/') ?>" + id_kegiatan,
    type: "GET",
    dataType: "JSON",
    success: function(data) {
        // 清空上一次加载的内容
        $('#modal-rekomendasi-container').empty();
        // 循环渲染所有关联数据
        data.rekomendasi.forEach(function(item) {
            $('#modal-rekomendasi-container').append(`
                <div class="card mb-2">
                    <div class="card-body">
                        <h6>${item.judul_rekomendasi}</h6>
                        <p>${item.deskripsi_rekomendasi}</p>
                    </div>
                </div>
            `);
        });
        // 单条kegiatan字段正常赋值
        $('#modal-kegiatan-nama').text(data.kegiatan.nama_kegiatan);
        $('#detail-modal').modal('show');
    }
});
  • 后端渲染模态框模板参考:
<div class="modal-body">
    <h5>Informasi Kegiatan</h5>
    <p>Nama Kegiatan: <?= $kegiatan->nama_kegiatan ?></p>
    <hr>
    <h5>Daftar Rekomendasi</h5>
    <?php if (count($rekomendasi) > 0): ?>
        <?php foreach ($rekomendasi as $item): ?>
            <div class="mb-3">
                <strong><?= $item['judul_rekomendasi'] ?></strong>
                <p><?= $item['deskripsi_rekomendasi'] ?></p>
            </div>
        <?php endforeach; ?>
    <?php else: ?>
        <p>Belum ada rekomendasi untuk kegiatan ini</p>
    <?php endif; ?>
</div>

4. 补充排查点

  • 确认tbl_rekomendasi_pit表中对应id_kegiatan确实存在多条测试数据,排除测试数据不足的问题
  • 检查详情按钮的自定义属性是否正确传递了当前行的id_kegiatan,避免传错ID仅查询到1条数据
  • 如果使用join关联查询两张表,确认没有添加limit 1限制,否则会强制只返回1条数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:54:02