CakePHP 2.4.6如何更新数据并获取受影响行数
在CakePHP 2.4.6中执行带条件更新并获取受影响行数
我之前在CakePHP 2.4.6里刚好处理过一模一样的需求,给你分享下亲测有效的解决方案,完美对应你要实现的update table set \status` = 2 where id=1 and `status`=1`这类带多条件的更新操作,还能拿到受影响的行数。
第一步:在模型中实现通用更新方法
在你的目标模型文件(比如MyModel.php)里添加下面这个方法,它能灵活处理ID+可选状态的更新条件:
public function updateById($id, $data, $status = ''){ if( empty($id) ) { return false; } $conditions = array(); $conditions['id'] = $id; // 可选添加status过滤条件,确保只有指定状态的记录才会被更新 if($status != ''){ $conditions['status'] = $status; } // 执行更新操作,这里用updateAll是因为它支持自定义多条件 $this->updateAll($data, $conditions); // 获取本次更新受影响的行数 return $this->getAffectedRows(); }
这个方法的几个关键点:
$id:必填参数,指定要更新的记录ID$data:要更新的字段数组,对应SQL里的SET部分,比如array('status'=>2)就对应set status=2$status:可选参数,用来限定只有当前状态为指定值的记录才会被更新,正好对应你需求里的and status=1- 最后调用
getAffectedRows()直接返回受影响的行数,不用额外处理
第二步:在控制器中调用方法
在控制器里直接调用模型的这个方法就能完成你要的逻辑:
// 示例:更新ID为5的记录,将views设为100、status设为2,且仅当原status是1时才执行 $affectedRows = $this->MyModel->updateById(5, array('views'=>100,'status'=>2), 1); // 你可以根据返回的行数做后续处理,比如判断更新是否生效 if ($affectedRows > 0) { // 有符合条件的记录被更新,执行成功逻辑 } else { // 没有找到符合ID+status条件的记录,更新未生效 }
这个方案在CakePHP 2.4.6版本中测试完全有效,既能精准控制更新条件,又能直接拿到受影响的行数,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者code.g
相关产品推荐
相关产品推荐

