我有2个表/模型(彼此没有任何关系),必须同时更新,如果其中任何一个无法完成更新过程,另一个将不会更新....
如果我尝试
if($this->model1->save($data))
$this->model2->save($data)
无论model2是否成功保存,model1都会更新。
这是任何回滚功能,如果第二个保存操作失败,我将撤消第一个保存操作
答案 0 :(得分:2)
您可以明确地开始并提交/回滚交易,如 Ross 的评论所示。
但CakePHP甚至支持saveAssociated()
开箱即用。您只需传递两个模型的数据:
为了保存记录及其具有hasOne或belongsTo关联的相关记录,数据数组应如下所示:
$data = array( 'User' => array('username' => 'billy'), 'Profile' => array('sex' => 'Male', 'occupation' => 'Programmer'), ); $Article->saveAssociated($data);
有一个选项atomic
可以控制交易的使用:
atomic:如果为true(默认),将尝试在单个事务中保存所有记录。如果数据库/表不支持事务,则应设置为false。
如果其中一个模型的验证失败,则另一个模型也不会保存。
请注意,您的数据库需要支持事务。对于MySQL,只有InnoDB存储引擎有事务支持,MyISAM没有。请参阅comparison of MySQL storage engines。