【问题标题】:cakephp 2.X doing update/save for 2 models/tablescakephp 2.X 为 2 个模型/表进行更新/保存
【发布时间】:2012-12-23 16:51:53
【问题描述】:

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

如果我尝试

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

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

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

【问题讨论】:

  • Cake 支持transactions,这听起来很相关。我不知道你的应用,但如果你不能没有另一个,那么听起来它们在一定程度上相关的。可能值得考虑。

标签: php sql cakephp save cakephp-2.1


【解决方案1】:

您可以按照 Ross 的评论中的建议明确地开始和提交/回滚事务。

但 CakePHP 甚至通过 saveAssociated() 开箱即用地支持这一点。您可以只为您的两个模型传递数据:

为了保存一条记录及其具有 hasOne 或 belongsTo 关联的相关记录,数据数组应该是这样的:

$data = array(
      'User' => array('username' => 'billy'),
      'Profile' => array('sex' => 'Male', 'occupation' => 'Programmer'),
);

$Article->saveAssociated($data);

有一个选项atomic 控制事务的使用:

atomic:如果为真(默认),将尝试将所有记录保存在单个事务中。如果数据库/表不支持事务,则应设置为 false。

如果其中一个模型验证失败,则另一个模型也不会被保存。

请注意,您的数据库需要支持事务。对于 MySQL,只有 InnoDB 存储引擎支持事务,MyISAM 没有。见comparison of MySQL storage engines

【讨论】:

    猜你喜欢
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多