我正在使用Codeigniter交易
$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->trans_complete();
Run Code Online (Sandbox Code Playgroud)
这工作得很好,我有问题是内部的trans_start和trans_complete我打电话等功能,这些功能与数据库交易,使他们包含插入和更新以及一些删除...例如:
$this->db->trans_start();
$this->utils->insert_function($data);
$this->utils->update_function2($test);
$this->db->trans_complete();
Run Code Online (Sandbox Code Playgroud)
现在,如果执行这些函数并且发生一些错误,CodeIgniter将不会执行回滚.
处理此类问题的最佳方法是什么?
我想到的唯一解决方案是从这些函数返回错误并在那些函数内添加(trans_stat和trans_complete)如果它返回错误测试则执行$this->db->trans_rollback
例如:
$this->db->trans_start();
$result = $this->utils->insert_function($data);
if($result === false){
$this->db->trans_rollback();
}
$this->db->trans_complete();
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?
更新1:
根据要求我正在调用的外部函数示例:
// insert_function contains
$rec = array(
'numero' => $numero,
'transaction_id' => $id,
'debit' => $product_taxes['amount_without_taxes'],
'date' => $data['date_transaction'],
);
$this->addExerciceAccountingRecords($rec);
and addExerciceAccountingRecords contains
function addExerciceAccountingRecords($records) {
$this->db->insert('transactions_exercices', $records);
}
Run Code Online (Sandbox Code Playgroud)