CodeIgniter 4模型update()函数无法更新MySQL数据库求助
解决CodeIgniter 4.x模型update()函数不更新数据库的问题
- 检查
$temp数组的有效性- 确认
$temp里的键名和数据库表字段名完全匹配,包括大小写(如果数据库是大小写敏感环境),比如数据库字段是phone,数组里不能写成Phone - 打印
$temp确认有实际要更新的数据:var_dump($temp); exit;,如果数组为空或者所有值和数据库现有记录完全一致,update操作不会触发变更
- 确认
- 验证where条件的正确性
- 确认
$data['id']是有效存在的主键值,打印查看:var_dump($data['id']); exit; - 直接在数据库里执行
SELECT * FROM your_table WHERE id = [你的$data['id']值],确认是否存在对应记录
- 确认
- 查看实际执行的SQL语句
- 开启数据库调试,打印最后执行的SQL:
把打印出的SQL拿到数据库里直接执行,看是否有报错或者不生效的原因$db = \Config\Database::connect(); $outletUpdateModel->where('id',$data['id'])->set($temp)->update(); echo $db->getLastQuery(); exit;
- 开启数据库调试,打印最后执行的SQL:
- 检查模型的
$allowedFields设置- CI4模型默认需要指定允许更新的字段,否则会过滤掉所有字段导致无操作,在你的
OutletUpdateModel里添加:protected $allowedFields = ['字段1', '字段2', ...]; // 替换成你要更新的实际字段
- CI4模型默认需要指定允许更新的字段,否则会过滤掉所有字段导致无操作,在你的
- 关于
save()函数的使用save()是新增/更新二合一,必须传入包含主键(id)的数据才会执行更新,比如:$updateData = array_merge($temp, ['id' => $data['id']]); $outletUpdateModel->save($updateData);- 同样要确保模型的
$allowedFields包含你要更新的字段
内容的提问来源于stack exchange,提问作者Wiley
相关产品推荐
相关产品推荐

