1

我有 2 个表/模型(彼此之间没有任何关系)必须同时更新,如果其中一个无法完成更新过程,另一个将不会更新...... .

如果我尝试

if($this->model1->save($data))
   $this->model2->save($data)

无论model2是否成功保存,model1都会更新。

如果第二个保存操作失败,这是我撤消第一个保存操作的任何回滚功能吗

4

1 回答 1

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 没有。请参阅MySQL 存储引擎的比较

于 2013-01-09T16:27:32.133 回答