Я использую транзакции Codeigniter
$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->trans_complete();
Это отлично работает, проблема в том, что внутри trans_start и trans_complete я вызываю другие функции, и эти функции имеют дело с базой данных, поэтому они содержат вставки и обновления, а также некоторые удаления... например:
$this->db->trans_start();
$this->utils->insert_function($data);
$this->utils->update_function2($test);
$this->db->trans_complete();
Теперь, если эти функции выполняются и возникают какие-либо ошибки, CodeIgniter не будет выполнять откат.
Каков наилучший способ справиться с такой проблемой?
Единственное решение, которое я имею в виду, - это вернуть ошибку из этих функций, а внутри этих функций добавить (trans_stat и trans_complete). И если он возвращает ошибку, проверьте и сделайте $this->db->trans_rollback
ex:
$this->db->trans_start();
$result = $this->utils->insert_function($data);
if($result === false){
$this->db->trans_rollback();
}
$this->db->trans_complete();
Есть ли лучший способ сделать это?
Обновление 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);
}