Press "Enter" to skip to content

Database Transaction Laravel – Cara Aman Insert Multiple Table Dalam 1 Kali Proses

fadli 0

Database Transaction Laravel adalah sebuah subset yang disediakan oleh sql yang bisa digunakan untuk menggabungkan banyak query sql kedalam sebuah group dan mengeksekusi semua nya secara bersamaan.

Dalam Laravel, transaksi database digunakan untuk mengelola operasi database yang terlibat dalam transaksi. Transaksi adalah serangkaian perintah yang harus dijalankan bersama-sama sebagai satu kesatuan. Jika salah satu perintah gagal, transaksi dapat digulung kembali (rollback) ke keadaan semula, sehingga tidak ada perubahan yang berlaku di database.

Didalam database transaction hanya ada 2 kondisi, yaitu Berhasil atau Tidak Sama sekali.

Sebagai contoh, pada transaksi penjualan, pasti kita akan berkomunikasi dengan banyak table:

  1. Mencatat data orderan nya
  2. Mencatat detail produk yang terjual
  3. Mengurangi stock produk tersebut
  4. Mencatat log pengurangan stock
  5. Pembuatan jurnal transaksi penjualan

Jika salah satu dari query diatas gagal dijalankan atau terdapat error, maka sistem pun pasti akan bermasalah karena kelengkapan data nya akan hilang, rantai informasi nya akan terputus, dan ini sangat berbahaya sekali.

Dengan database transaction, jika salah satu dari proses diatas gagal, maka sistem akan me-rollback setiap transaksi yang sudah terjadi, jika salah satu gagal, maka semua nya akan gagal, sehingga kelengkapan data pun akan terjaga.

Database Transaction Laravel

Untuk menggunakan database transaction pada laravel terdapat 2 cara, Automatically dan Manually.

Automatically Transaction

Pada Automatically Transaction, setiap query sql dibungkus kedalam sebuah method transaction yang disediakan oleh DB Facade.

Baca: Apa Itu Facade Laravel Dan Bagaimana Cara Membuatnya.

Contoh Automatically Transaction:

use Illuminate\Support\Facades\DB;
 
DB::transaction(function () {
    DB::update('update users set votes = 1');

Comment::create($data); DB::delete('delete from posts'); });

Diatas, terdapat 3 query yang di grouping menggunakan method transaction, jika semua query tersebut berhasil dijalankan maka secara otomatis transaksi nya akan di commit.

Tapi jika ada salah satu query yang gagal, maka transaksi nya akan di rollback.

Didalam method transaction tersebut, kalian dapat menggunakan query builder ataupun eloquent.

Membawa Parameter Menggunakan Kata Kunci use

Jika kamu ingin mem-passing parameter kedalam DB::transaction(), kamu bisa gunakan kata kunci use, sebagai contoh:

DB::transaction(function () use ($user_id) {
    User::findOrFail($user_id)->update(['set_votes' => 1]);

    Comment::create($data);

    DB::delete('delete from posts');
});

Contoh diatas saya memasukkan parameter $user_id, kalo kalian ingin memasukkan lebih dari 1 parameter, bisa dipisah dengan koma.

Manually Transaction

Untuk menjalankan transaksi secara manual, ada 3 method dari Facade DB yang perlu kita gunakan.

1. DB::beginTransaction()

Method ini digunakan untuk memulai transaksi yang akan dilakukan, biasanya ditaruh didalam awal statement.

2. DB::commit()

Jika method ini terpanggil maka akan menyimpan semua operasi yang dilakukan.

3. DB::rollBack()

Method ini digunakan untuk membatalkan / merollback operasi yang telah dijalankan.

Biasanya ketiga method tersebut dipasangkan dengan error handling try catch, sebagai contoh:

use Illuminate\Support\Facades\DB;

DB::beginTransaction();

try {
    // Lakukan operasi database di sini
    DB::table('users')->update(['active' => 0]);
    DB::table('orders')->delete();

    DB::commit();
    echo "Transaksi berhasil!";
} catch (\Exception $e) {
    DB::rollback();
    echo "Transaksi gagal: " . $e->getMessage();
}

Dalam contoh di atas, kita memulai transaksi dengan memanggil metode beginTransaction() dari DB Facade.

Kemudian, kita menjalankan operasi database, seperti memperbarui tabel ‘users’ dan menghapus entri dari tabel ‘orders’. Jika tidak ada kesalahan yang terjadi, kita melakukan commit() untuk menyimpan perubahan ke database.

Namun, jika terjadi kesalahan, kita memanggil rollback() untuk membatalkan semua perubahan yang telah dilakukan.

Penggunaan transaksi ini membantu memastikan bahwa semua operasi database yang terkait saling bergantung pada satu sama lain dan berhasil dilakukan sebelum perubahan disimpan secara permanen ke dalam database.

Jika ada kesalahan dalam salah satu operasi, transaksi akan digulung kembali dan tidak ada perubahan yang terjadi di dalam database.

Support Us

Jika artikel ini bermanfaat untuk kamu, atau membantu menyelesaikan masalah yang sedang kamu hadapi, kamu juga bisa dukung kami dengan mengunjungi halaman berikut: https://saweria.co/sangcahayaid

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: