我是cakephp的新手。 我想知道在cakephp中是否可以使用单个事务处理多个模型提交和回滚。 我想做一些像这样的事情
<?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));
}
}
?>
答案 0 :(得分:3)
是的,你可以。
$this->Model->begin(); // Start transaction
$this->Model->commit(); // Commit transaction
$this->Model->rollback(); // Rollback transaction
另请查看manual。
答案 1 :(得分:3)
如果您的模型1-3具有“有很多”或“属于”关系,您应该使用
$this->Model1->saveAll($this->data);
它将负责在单个事务中验证并保存所有发布的模型数据。
答案 2 :(得分:1)
最优选的方法是Model :: saveAll(),如果它们是相关的。
如果你不能使用saveAll(),你需要使用Model :: query()之类的东西,你可以这样做:
$this->ModelX->begin();
$this->Model1->query();
$this->Model2->query();
$this->ModelX->commit();
从Cake 1.3开始,运行begin / commit / rollback语句时使用的模型实际上并不重要;它们都会导致执行相同的代码,并且没有任何特定于模型的副作用。