2013-04-08 67 views
0

我有一个大的数据集,需要在发布到服务器时写入数据库,但可能会在客户端编辑器中添加一条额外的记录,触发“完整性约束违规”。当抛出数据库错误异常时,我可以回滚事务吗?

我的问题是,当我到达错误触发的数据点时,很多以前的数据已经在数据库中更新。我需要回滚并拒绝发布的数据。

这是我的控制器的操作。

/** 
* Handles saving data from the network editor. 
*/ 
public function json_save() 
{ 
    if($this->request->is('post')) 
    { 
     $result = array(); 
     $data = $this->request->input('json_decode'); 
     if(isset($data->network_id) && !empty($data->network_id)) 
     { 
      $dataSource = $this->Node->getDataSource(); 
      $dataSource->begin(); 

      $result['nodes'] = $this->updateModel($data->network_id, $this->Node, 'nodes', $data, array(
       'ParamValue' 
      )); 
      $result['connections'] = $this->updateModel($data->network_id, $this->Connection, 'connections', $data); 

      $dataSource->commit(); 

      $this->viewClass = 'Json'; 
      $this->set('result', $result); 
      $this->set('_serialize', array(
       'result' 
      )); 

      return; 
     } 
    } 

    throw new ErrorException('Posted data missing.'); 
} 

我控制器的updateModel功能进行一些删除和更新机型$this->Node$this->Connection

如何在更新$this->Connection模型期间通常抛出的“完整性约束违规”中回滚。

我不确定它是否是一个PHP异常,我可以捕捉然后做回滚,或者如果有不同的方法来捕捉它。

回答

2

你可以做:

$dataSource->begin(); 

try { 
    // The queries here. 
} catch (Exception $e) { 
    $dataSource->rollback(); 
    throw $e; 
} 

$dataSource->commit(); 
相关问题