Codeigniter批量更新报错:Array转字符串及未知列问题求助
错误原因
- 模型
ubahAbsen方法中,直接调用$this->input->post('keterangan')和$this->input->post('ket')获取的是整个请求的数组,而非单个学生对应的字段值,数据库无法识别数组类型,因此抛出「Array to string conversion」错误。 - 控制器已经循环处理每个学生并组装好单条更新数据,但模型里重复循环POST的
id_siswa数组,还覆盖了控制器传入的$data,逻辑完全混乱。
修正后的控制器代码
$input = $this->input->post(); foreach ($input['id_siswa'] as $key => $id_siswa) { $data = [ 'id_siswa' => $id_siswa, 'id_mapel' => $input['id_mapel'], 'id_kelas' => $input['id_kelas'], 'time_in' => time(), 'tanggal' => date("d"), 'bulan' => date("m"), 'tahun' => date("Y"), 'keterangan' => $input['keterangan'][$key], 'ket' => $input['ket'][$key] ]; $this->guru_m->ubahAbsen($data); } redirect('gr/absensi');
修正后的模型代码
public function ubahAbsen($data) { // 从传入的$data中提取需要更新的字段 $updateData = [ 'keterangan' => $data['keterangan'], 'ket' => $data['ket'], 'time_in' => $data['time_in'], 'tanggal' => $data['tanggal'], 'bulan' => $data['bulan'], 'tahun' => $data['tahun'] ]; // 根据id_siswa执行更新 $this->db->where('id_siswa', $data['id_siswa']); $this->db->update('absensi', $updateData); }
更高效的批量更新优化(可选)
如果想减少数据库请求次数,可改成批量更新:
控制器代码
$input = $this->input->post(); $updateData = []; foreach ($input['id_siswa'] as $key => $id_siswa) { $updateData[] = [ 'id_siswa' => $id_siswa, 'keterangan' => $input['keterangan'][$key], 'ket' => $input['ket'][$key], 'time_in' => time(), 'tanggal' => date("d"), 'bulan' => date("m"), 'tahun' => date("Y") ]; } $this->guru_m->ubahAbsenBatch($updateData); redirect('gr/absensi');
模型代码
public function ubahAbsenBatch($updateData) { $this->db->update_batch('absensi', $updateData, 'id_siswa'); }
注:
update_batch方法会根据第三个参数(这里是id_siswa)作为匹配条件,批量执行更新操作,比循环单条更新更高效。
内容的提问来源于stack exchange,提问作者Terizla Smith
相关产品推荐
相关产品推荐

