Bagaimana untuk Memastikan Rollback Transaksi dalam CodeIgniter Apabila Memanggil Fungsi Luaran?

Linda Hamilton
Lepaskan: 2024-11-03 05:55:30
asal
185 orang telah melayarinya

How to Ensure Transaction Rollback in CodeIgniter When Calling External Functions?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan