12 Desember 2023

DB Transaction

Assalamu alaikum Wr. Wb

Salam Pinter Bareng Komputer, ...zero bit...

Database transaction adalah salah satu subset yang disediakan SQL, digunakan untuk mengatur alur data transaksi dalam suatu database. Mudahnya, kita dapat menggabungkan banyak queri ke dalam grup dan akan mengeksekusi secara bersama sebagai bagian dari Transaction. Jika ada kegagalan dalam 1 node (proses), maka seluruh transaksi (proses input) akan dibatalkan.

Database Transaction ini akan sangat bermanfaat saat kita memiliki sebuah proses yang membutuhkan syarat untuk menyimpan ke dalam beberapa tabel sekaligus dan semua harus sukses. .

Contoh :
Dalam proses penjualan barang maka user butuh menyimpan ke dalam tabel produks (mengurangi stok), tabel penjualans (menambah data penjualan baru) dan tabel penjualan_details (menambah data detail penjualan baru). Proses ke dalam ketiga tabel tersebut harus sukses semua. Jika salah satu gagal maka semua proses harus dibatalkan. Karena kalau misal stok telah dikurangi tapi tidak dapat dicek berkurangnya stok hasil dari penjualan yang mana, maka itu berbahaya bagi kelangsungan data.

Di Laravel Terdapat 3 metode yang biasa digunakan saat menggunakan DB transaction yaitu :
  1. DB::beginTransactions
    Kalian dapat menggunakan metode ini untuk memulai transaksi pada permulaan statement
  2. DB::commit
    Metode ini digunakan untuk menyimpan semua operasi yang dilakukan setelah metode DB::beginTransactions
  3. DB::rollback
    Metode ini digunakan untuk membatalkan semua operasi yang dilakukan setelah metode DB::beginTransaction
Contoh penggunaan Database Transaction:
  1. Contoh Scipt:
  2.  <?php  
     namespace App\Http\Controllers;  
     use Illuminate\Http\Request;  
     use App\Models\Produk;  
     use Illuminate\Support\Facades\DB;
    
     class ProdukController extends Controller  
     {  
       //function utk menyimpan data produk baru  
       public function store(Request $request){  
         $validasiData   = $request->validate([  
           'namaproduk'  => ['required','unique:produks','max:255'],  
           'deskripsi'   => ['required'],  
           'harga'       => ['required','numeric']  
         ]);   
         DB::beginTransaction();  
         try  
         {  
           Produk::create($request->all());  
           DB::commit();  
           return redirect('produk')->with('pesansukses', 'Data Sukses Disimpan');  
         }  
         catch(\Exception $e)  
         {  
           DB::rollback();  
           return redirect()->back()->withInput()->with('pesansalah', 'Data Gagal Disimpan');  
         }  
       }  
     }  
    
  3. Untuk menampilkan messagebox data sukses maka kita bisa menangkap FlashSession bernama pesansukses yang dikirimkan dari Controller. Demikian juga untuk proses gagal, maka kita dapat menangkap FlashSession bernama pesansalah. Untuk itu buka halaman index.blade.php kemudian tambahkan script berikut dibawah di bawah script library sweetalert dan sebelum tag tutup body.
  4.      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>  
       <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>  
       
       <script>  
         @if(session()->has('pesansukses'))  
           var msg = @json(session()->pull('pesansukses'));  
           Swal.fire({  
             title: "Konfirmasi",  
             text: msg,  
             icon: "success"  
           });  
         @endif  
         @if(session()->has('pesansalah'))  
           var msg = @json(session()->pull('pesansalah'));  
           Swal.fire({  
             title: "Konfirmasi",  
             text: msg,  
             icon: "success"  
           });  
         @endif  
       </script>   
       </body>
    
  5. Berikut tampilan MessageBox saat data sukses disimpan:
    Tampilan SweetAlert saat data sukses disimpan


Semoga artikel ini bermanfaat.

0 comments:

Posting Komentar