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

时间:2013-01-09 15:27:53

标签: php sql cakephp save cakephp-2.1

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

如果我尝试

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

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

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

1 个答案:

答案 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