2012-09-04 57 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; 
    } 
}