2012-09-04 58 views
2

如何在控制器中启动事务,然后尝试保存多个彼此没有关系的模型?如果有任何失败,显然我希望回滚,如果一切正常,然后提交。CakePHP 1.3 - 保存不相关模型的事务

我想我的问题是我在哪个模型上开始交易?

$datasource = $this->Car->getDataSource(); 
$datasource->begin($this->Car); 

$car = $this->Car->save(); 
$dog = $this->Dog->save(); 
$house = $this->House->save(); 

if ($car && $dog && $house) { 
    $datasource->commit($this->Car); 
} else { 
    $datasource->rollback($this->Car); 
} 

这项工作将确保狗和家族的保存以及车?即交易启动的模式是否重要?

回答

6

您使用哪种模型开始交易并不重要,但通常人们使用与控制器“最接近”的模型(如果有的话)。

$continue = true; 
$this->Car->begin(); 

// Do stuff that might set $continue to false. 

if ($continue) { 
    $this->Car->commit(); 
} else { 
    $this->Car->rollback(); 
} 

设置$的 “做的东西” 位在继续,检查每个保存等

if (!$this->Car->save()) { 
    $continue = false; 
} 

if ($continue) { 
    if (!$this->Dog->save()) { 
     $continue = false; 
    } 
} 

if ($continue) { 
    if (!$this->House->save()) { 
     $continue = false; 
    } 
}