cakephp 2.X做更新/保存2个模型/表


cakephp 2.X doing update/save for 2 models/tables

我有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存储引擎的比较