CodeIgniter框架下按索引向MySQL批量更新branch_price列失败如何解决?
CodeIgniter 批量更新items表branch_price字段问题修复
原代码存在的问题
- 缺少表主键字段查询:
update_batch需要通过唯一标识匹配要更新的行,原查询只查了bprice字段,没有取主键(通常为id),无法定位要更新的行 - 数组赋值逻辑错误:foreach循环中每次直接覆盖
$data变量,没有往数组内追加数据,最终$data仅保存最后一条记录的内容 - 字段取值错误:
$value['bprice']已经是当前行的bprice数值,额外加[$key]会尝试读取字符串对应下标的字符,得到错误的计算值 update_batch参数缺失:CodeIgniter的update_batch方法需要传入第三个参数,指定作为更新匹配条件的字段名
修复后的代码
// 查询时要包含主键字段,假设主键名为id $this->db->select('id, bprice'); $this->db->from('items'); $this->db->limit(20); $query = $this->db->get()->result_array(); $data = []; foreach ($query as $value) { $data[] = [ 'id' => $value['id'], 'branch_price' => (float)$value['bprice'] * 1.3 // 等价于原价加30% ]; } // 第三个参数指定匹配更新的主键字段 return $this->db->update_batch('items', $data, 'id');
更高效的替代方案
如果不需要单独处理每行的特殊逻辑,直接执行SQL语句更新效率更高,避免先查再写的两次IO:
$this->db->query("UPDATE items SET branch_price = bprice * 1.3 LIMIT 20");
内容的提问来源于stack exchange,提问作者Tech Image
相关产品推荐
相关产品推荐

