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
相关产品推荐
相关产品推荐

