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