2013-01-09 78 views
1

我有2個表/模型(彼此沒有任何關係)必須同時更新,如果任何一個不能完成更新過程,其他人會不會被更新....cakephp 2.X更新/保存2個模型/表格

,如果我嘗試

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

的MODEL1將被更新,無論MODEL2保存成功與否。

這是任何回滾功能,我撤消先救行動,如果第二拯救行動失敗

+1

Cake支持[transactions](http://book.cakephp.org/2.0/en/models/transactions.html),這聽起來像是相關的。我不知道你的應用程序,但如果你沒有其他的應用程序,那麼它聽起來像*在某種程度上與*有關。值得考慮。 – Ross

回答

2

你可以明確地開始和提交/回滾事務,如羅斯在評論建議。

但CakePHP甚至支持saveAssociated()開箱即用。您只需通過數據爲您的機型:

與具有hasOne或屬於關聯協會及其相關記錄一起,保存記錄,數據陣列應該是這樣的:

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

$Article->saveAssociated($data); 

有它控制事務的使用選項atomic

原子:如果爲真(默認),將出手救所有記錄都在一次交易中。如果數據庫/表不支持事務,則應該設置爲false。

如果某個模型的驗證失敗,另一個模型也不會保存。

請注意,您的數據庫需要支持事務。對於MySQL,只有InnoDB存儲引擎具有事務支持,MyISAM則不支持。請參閱comparison of MySQL storage engines