我有2个表/模型(彼此没有任何关系)必须同时更新,如果任何一个不能完成更新过程,另一个将不会更新....
如果我尝试
if($this->model1->save($data))
$this->model2->save($data)
model1将被更新,无论model2是否成功保存。
这是一个回滚函数,如果第二个保存操作失败,我撤销第一个保存操作
您可以显式地开始和提交/回滚事务,正如Ross在注释中建议的那样。
但是CakePHP甚至支持这个开箱即用的saveAssociated()
。你可以为你的两个模型传递数据:
为了保存一条记录以及它的相关记录具有hasOne或belongsTo关联,数据数组应该像这样:
$data = array( 'User' => array('username' => 'billy'), 'Profile' => array('sex' => 'Male', 'occupation' => 'Programmer'), ); $Article->saveAssociated($data);
有一个选项atomic
控制事务的使用:
atomic:如果为true (default),将尝试在单个事务中保存所有记录。如果数据库/表不支持事务,应该设置为false。
如果其中一个模型验证失败,另一个模型也不会被保存。
注意,您的数据库需要支持事务。对于MySQL,只有InnoDB存储引擎支持事务,MyISAM不支持。参考MySQL存储引擎的比较