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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:57:17