Transaksi CodeIgniter
Transaksi CodeIgniter menyediakan mekanisme untuk melaksanakan berbilang operasi pangkalan data sebagai sebahagian daripada satu transaksi. Ini memastikan bahawa semua operasi berjaya diselesaikan atau semuanya digulung semula jika ralat berlaku.
Dalam senario anda, anda sedang memanggil fungsi luaran dalam blok transaksi, tetapi jika fungsi ini menghadapi ralat, transaksi tidak akan digulung semula seperti yang dikehendaki. Ini kerana fungsi luaran anda tidak mempunyai akses kepada keadaan urus niaga.
Satu penyelesaian adalah untuk menangkap ralat dalam fungsi luaran anda dan melakukan pengembalian secara manual jika perlu. Sebagai contoh:
<code class="php">try { $this->db->trans_start(); $this->utils->insert_function($data); $this->utils->update_function2($test); $this->db->trans_complete(); } catch (Exception $e) { $this->db->trans_rollback(); }</code>
Walau bagaimanapun, penyelesaian yang lebih mantap ialah merangkum operasi pangkalan data anda dalam kaedah model individu. Ini membolehkan organisasi yang lebih baik dan pengendalian ralat terpusat. Dalam kes ini, anda boleh memindahkan fungsi insert_function dan update_function2 anda ke dalam model dan mengendalikan transaksi dalam kaedah model:
TransactionExampleModel.php
<code class="php">class TransactionExampleModel extends CI_Model { public function insertData($data) { $this->db->trans_start(); $this->db->insert('table_name', $data); if ($this->db->trans_status() === FALSE) { $this->db->trans_rollback(); return FALSE; } $this->db->trans_commit(); return TRUE; } public function updateData($data, $id) { $this->db->trans_start(); $this->db->where('id', $id); $this->db->update('table_name', $data); if ($this->db->trans_status() === FALSE) { $this->db->trans_rollback(); return FALSE; } $this->db->trans_commit(); return TRUE; } }</code>
Kemudian, dalam pengawal anda, anda boleh memanggil kaedah model dalam blok transaksi:
<code class="php">$this->load->model('TransactionExampleModel'); $this->db->trans_start(); $result1 = $this->TransactionExampleModel->insertData($data); $result2 = $this->TransactionExampleModel->updateData($test, $id); $this->db->trans_complete();</code>
Pendekatan ini menyediakan cara yang lebih terpusat dan teguh untuk mengurus urus niaga dalam aplikasi CodeIgniter anda.
Atas ialah kandungan terperinci Bagaimana untuk Memastikan Rollback Transaksi dalam CodeIgniter Apabila Memanggil Fungsi Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!