如何在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'); } }
问题分析
- 控制器错误地从表单POST数据获取
job_title,违背自动填充的需求; - 获取
lowongan数据时用result()返回数组,单条记录场景下用row()更便捷; - 模型的
apply_data方法中,insert操作不需要where条件,属于冗余错误逻辑; - 可顺便自动填充
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
相关产品推荐
相关产品推荐

