Transakcje Codeigniter

Używam transakcji Codeigniter

$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->trans_complete();

To działa dobrze, mam problem z tym, że wewnątrztrans_start itrans_complete Dzwonię do innych funkcji i te funkcje dotyczą bazy danych, więc zawierają wstawki i aktualizacje, a niektóre usuwają ... ex:

$this->db->trans_start();
 $this->utils->insert_function($data);
 $this->utils->update_function2($test);
$this->db->trans_complete();

Teraz, jeśli te funkcje zostaną wykonane i wystąpią pewne błędy, CodeIgniter nie dokona wycofania zmian.

Jaki jest najlepszy sposób radzenia sobie z takim problemem?

Jedynym rozwiązaniem, mam na myśli, jest zwrócenie błędu z tych funkcji i dodanie do nich funkcji (trans_stat itrans_complete) A jeśli zwróci test błędu i zrobić$this->db->trans_rollback

dawny:

    $this->db->trans_start();
     $result = $this->utils->insert_function($data);
     if($result === false){
       $this->db->trans_rollback();
     }
    $this->db->trans_complete();

Czy jest na to lepszy sposób?

Aktualizacja 1:

Zgodnie z żądaniem próbki funkcji zewnętrznej dzwonię:

   // 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);
    }

questionAnswers(6)

yourAnswerToTheQuestion