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

CodeIgniter如何避免user_course_tbl表员工与课程编码重复录入

实现防重复录入的修改方案

1. 数据库层添加联合唯一索引(兜底防护)

首先给user_course_tbl表添加staff_name和course_code的联合唯一索引,作为最后一道防重屏障,避免并发请求绕过应用层校验导致脏数据:

ALTER TABLE user_course_tbl ADD UNIQUE KEY `uk_staff_course` (`staff_name`, `course_code`);

2. 修改模型层代码,添加重复校验逻辑

修改insert_courses_for_user方法,先校验当前员工+课程的组合是否已经存在,存在则直接返回特殊标记,不存在再执行插入:

function insert_courses_for_user($data)
{
    // 先校验员工+课程组合是否已存在
    $exists = $this->db->where('staff_name', $data['staff_name'])
                       ->where('course_code', $data['course_code'])
                       ->count_all_results('user_course_tbl');
    if ($exists > 0) {
        // 重复数据返回-1作为标记,方便控制器区分错误类型
        return -1;
    }
    // 无重复则执行插入
    $this->db->insert("user_course_tbl", $data);
    return $this->db->insert_id();
}

3. 修改控制器层代码,适配不同返回结果的提示

根据模型返回的结果,区分「重复」「插入失败」「插入成功」三种场景,给用户对应提示:

function insert_courses_for_users()
{  
    $this->form_validation->set_rules('user', 'User', 'required');
    $this->form_validation->set_rules('courscode', 'Course Code', 'required');
    
    // 补充表单校验不通过的处理逻辑
    if ($this->form_validation->run() == FALSE) {
        $this->session->set_flashdata('error', validation_errors());
        redirect($_SERVER['HTTP_REFERER']);
    }

    $id = $this->input->post('txtid');
    $user = $this->input->post('user');
    $coursecode = $this->input->post('courscode');

    $insert_res = $this->Course_model->insert_courses_for_user(array('id' => $id, 'staff_name' => $user, 'course_code' => $coursecode));
    
    if ($insert_res > 0) {
        $this->session->set_flashdata('success', "员工课程关联添加成功"); 
    } elseif ($insert_res == -1) {
        $this->session->set_flashdata('error', "该员工已关联此课程,请勿重复添加");
    } else {
        $this->session->set_flashdata('error', "员工课程关联添加失败,请稍后重试");
    }

    redirect($_SERVER['HTTP_REFERER']);
}

可选优化

可以在视图层添加Ajax实时校验,用户选择完员工和课程后就异步请求后端校验是否重复,提前给用户提示,减少提交后才报错的操作成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:21:00