我有 2 个表/模型(彼此之间没有任何关系)必须同时更新,如果其中一个无法完成更新过程,另一个将不会更新...... .
如果我尝试
if($this->model1->save($data))
$this->model2->save($data)
无论model2是否成功保存,model1都会更新。
如果第二个保存操作失败,这是我撤消第一个保存操作的任何回滚功能吗
我有 2 个表/模型(彼此之间没有任何关系)必须同时更新,如果其中一个无法完成更新过程,另一个将不会更新...... .
如果我尝试
if($this->model1->save($data))
$this->model2->save($data)
无论model2是否成功保存,model1都会更新。
如果第二个保存操作失败,这是我撤消第一个保存操作的任何回滚功能吗
正如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 没有。请参阅MySQL 存储引擎的比较。