CodeIgniter 3关联表主外键删除验证实现方法
实现关联数据的删除验证(CodeIgniter 3)
需求说明
两张表通过主键-外键关联,删除主键表数据前需执行如下验证:
- 若主键仍有关联的外键数据:禁止删除操作,弹出提示
- 若无关联外键数据:允许删除,提示操作成功
原有代码
控制器(Kelas.php)
public function delete($id) { $data['kelas'] = $this->Kelas_model->delete_data($id); $this->session->set_flashdata('pesan', '<div class="alert alert-danger alert-dismissible fade show" role="alert"> Data Deleted Successfully! <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> </div>'); redirect('kelas'); }
模型(Kelas_model.php)
public function delete_data($id_kelas) { $this->db->where('id_kelas', $id_kelas); return $this->db->delete('kelas'); }
修改方案
1. 模型层:添加关联数据检查方法
在Kelas_model.php中新增检查外键关联的方法(需将示例中的siswa替换为你的实际外键表名):
// 检查当前主键是否存在关联的外键数据 public function has_related_data($id_kelas) { $this->db->where('id_kelas', $id_kelas); $query = $this->db->get('siswa'); // 替换为你的外键表名称 return $query->num_rows() > 0; } // 保留原删除方法 public function delete_data($id_kelas) { $this->db->where('id_kelas', $id_kelas); return $this->db->delete('kelas'); }
2. 控制器层:调整删除逻辑
修改控制器的delete方法,先执行关联检查,再根据结果执行对应操作:
public function delete($id) { // 检查是否存在关联数据 if ($this->Kelas_model->has_related_data($id)) { // 存在关联,弹出禁止删除的提示 $this->session->set_flashdata('pesan', '<div class="alert alert-warning alert-dismissible fade show" role="alert"> 无法删除!该数据仍关联有子数据。 <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> </div>'); } else { // 无关联数据,执行删除并提示成功 $this->Kelas_model->delete_data($id); $this->session->set_flashdata('pesan', '<div class="alert alert-success alert-dismissible fade show" role="alert"> 数据删除成功! <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> </div>'); } redirect('kelas'); }
注意事项
- 请根据实际业务场景替换代码中的外键表名称
- 提示框样式可根据项目使用的UI框架自行调整
内容的提问来源于stack exchange,提问作者Abuzar Ghiffari
相关产品推荐
相关产品推荐

