6

I am new to cakephp. I want to know if it is possible in cakephp to to handle multiple model commit and rollback with single transaction. I want to do some thing like this

<?php
function add(){
    $transaction = begintransaction;
    if(model1->save()){
        if(model2->save()){
            if(model3->save(){
            }
            else{
                $errorFlag['model3'] = "Error in model 3"; 
            }
        }
        else{
            $errorFlag['model2'] = "Error in model 2";
        }
    }
    else{
        $errorFlag['model3'] = "Error in model 3";
    }
    if(empty($errorFlag)){ //no error in saving the model
        $transaction->commit();
        $this->Session->setFlash(__('The form data with multiple model is saved', true)); 
    }
    else{   //error in saving the model
        $transaction->rollback();
        $this->Session->setFlash(__('The form data with multiple model is saved', true));
    }
}
?>
4

3 回答 3

3

如果您的模型 1-3 具有“有很多”或“属于”关系,您可能应该使用

$this->Model1->saveAll($this->data);

它将负责在单个事务中验证和保存所有已发布的模型数据。

于 2011-03-15T15:35:53.607 回答
3

是的你可以。

$this->Model->begin(); // Start transaction
$this->Model->commit(); // Commit transaction
$this->Model->rollback(); // Rollback transaction

也看看手册

于 2010-06-10T23:51:47.743 回答
1

最可取的方法是 Model::saveAll(),如果它们是相关的。

如果你不能使用 saveAll() 因为你需要使用诸如 Model::query() 之类的东西,你可以这样做:

$this->ModelX->begin();
$this->Model1->query();
$this->Model2->query();
$this->ModelX->commit();

从 Cake 1.3 开始,当你运行 begin/commit/rollback 语句时,你使用的模型实际上并不重要。它们都会导致执行相同的代码,并且没有任何特定于模型的副作用。

于 2011-08-30T01:39:19.443 回答