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