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

如何在CodeIgniter中从另一张表获取职位名称值

自动填充apply_job表的job_title字段解决方案

问题说明

现有两张数据库表:

  • lowongan表:包含title(职位名称)、lokasi(职位地点)、level_pekerja(职位级别)字段
  • apply_job表:包含company_id、job_title、job_loc、job_lvl字段

需求:用户申请职位提交表单后,apply_job表中的job_title字段自动从lowongan表对应记录的title字段取值,无需用户手动输入。

现有代码

模型代码(m_lowongan.php)

public function apply_data($where, $data, $table){
    $this->db->where($where);
    $this->db->insert($table, $data);
}

控制器代码

public function store_apply($id){
    $data_lowongan['lowongan'] = $this->db->get_where('lowongan', ['id'=>$id])->result();

    $config['upload_path']      = './upload/';
    $config['allowed_types']    = 'pdf';
    $config['max_size']         = 2000;
    
    $this->load->library('upload', $config);

    if(!$this->upload->do_upload('pdf_file')){
        $error = array('error' => $this->upload->display_errors());

        $this->load->view('apply_form', $error);
    }else{
        $data_upload = $this->upload->data();

        $company_id = $this->input->post('company_id');
        $job_title  = $this->input->post('title');
        $user_name  = $this->session->userdata('name');
        $user_desc  = $this->input->post('user_desc');

        $data = array(
            'user_name'     => $user_name,
            'company_id'    => $company_id,
            'job_title'     => $job_title,
            'user_desc'     => $user_desc,
            'pdf_file'      => $data_upload['file_name']
        );

        $where = array(
            'company_id'    => $company_id,
        );

        $this->m_lowongan->apply_data($where, $data, 'apply_job');
        
        redirect('dashboard');
    }
}

问题分析

  1. 控制器错误地从表单POST数据获取job_title,违背自动填充的需求;
  2. 获取lowongan数据时用result()返回数组,单条记录场景下用row()更便捷;
  3. 模型的apply_data方法中,insert操作不需要where条件,属于冗余错误逻辑;
  4. 可顺便自动填充apply_job表的job_loc和job_lvl字段,对应lowongan表的lokasi和level_pekerja。

修改后的代码

修正模型代码(m_lowongan.php)

public function apply_data($data, $table){
    // 插入操作无需where条件,直接新增记录
    $this->db->insert($table, $data);
}

修正控制器代码

public function store_apply($id){
    // 获取对应职位的单条记录,用row()替代result()
    $lowongan = $this->db->get_where('lowongan', ['id'=>$id])->row();

    // 处理职位不存在的情况
    if(!$lowongan){
        redirect('jobs');
        return;
    }

    $config['upload_path']      = './upload/';
    $config['allowed_types']    = 'pdf';
    $config['max_size']         = 2000;
    
    $this->load->library('upload', $config);

    if(!$this->upload->do_upload('pdf_file')){
        $error = array('error' => $this->upload->display_errors());
        $this->load->view('apply_form', $error);
    }else{
        $data_upload = $this->upload->data();

        $company_id = $this->input->post('company_id');
        $user_name  = $this->session->userdata('name');
        $user_desc  = $this->input->post('user_desc');

        // 从lowongan记录中自动提取职位相关字段
        $data = array(
            'user_name'     => $user_name,
            'company_id'    => $company_id,
            'job_title'     => $lowongan->title, // 自动填充职位名称
            'job_loc'       => $lowongan->lokasi, // 可选:自动填充职位地点
            'job_lvl'       => $lowongan->level_pekerja, // 可选:自动填充职位级别
            'user_desc'     => $user_desc,
            'pdf_file'      => $data_upload['file_name']
        );

        // 调用模型时不再传递where参数
        $this->m_lowongan->apply_data($data, 'apply_job');
        
        redirect('dashboard');
    }
}

补充说明

  • 表单中需移除title输入框,避免用户手动输入干扰自动填充逻辑;
  • 新增职位不存在的判断,防止因无效id导致的报错;
  • 若不需要自动填充job_loc和job_lvl,可从$data数组中删除对应字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:50:43