场景:控制器中保存数据的方法是对第一个Model->save()
调用的结果使用一些复杂的计算。然后将结果保存在相关的关联模型中。有时会失败。。
有没有一种内置的方法可以在第二次保存失败时删除第一条记录?
如果您在不首先保存到数据库的情况下无法在应用程序中进行这些计算,请使用Transactions:
$dbo = $this->Model->getDataSource();
$dbo->begin($this->Model);
$this->Model->save(...);
/* here be dragons */
if (/* success */) {
$dbo->commit($this->Model);
} else {
$dbo->rollback($this->Model);
}
这需要使用数据库和支持事务的存储引擎,比如MySQL的InnoDB。