Database transaction adalah salah satu subset yang disediakan SQL, digunankan untuk mengatur alur data transaksi dalam suatu database. Praktisnya, Kita dapat menggabungkan banyak kueri SQL ke dalam grup dan akan mengeksekusi semuanya secara bersama sebagai bagian dari Transaction. Jika ada kegagalan dalam 1 node (proses), seluruh transaksi (proses input) akan dibatalkan.
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
Sifat Transaksi
- Atomicity - memastikan bahwa semua operasi dalam unit kerja diselesaikan dengan sukses. Jika tidak, transaksi dibatalkan pada titik kegagalan dan semua operasi sebelumnya dikembali ke keadaan semula.
- Consistency- memastikan bahwa database mengubah status dengan benar pada transaksi yang berhasil dilakukan.
- Isolation - memungkinkan transaksi untuk beroperasi secara independen dan transparan satu sama lain.
- Durability - memastikan bahwa hasil atau efek dari transaction commit tetap ada jika terjadi kegagalan sistem.
Contoh Penggunaan:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
Atau dengan menggunakan manual transaction, contoh penggunaannya sebagai berikut:
public function store()
{
DB::beginTransaction();
try{
// Step 1 : Create User
$user = new User();
$user->email = $request->email;
$user->username = $request->username;
$user->save();
//Step 2 : Amount Charged
$user_amount = new UserAmount();
$user_amount->user_id = $user->id;
$user_amount->amount = $request->amount;
$user_amount->save();
DB::commit();
return redirect()->route('home')->with('success','Transaction Successfully');
}catch(\Exception $e){
DB::rollback();
return redirect()->back()
->with('warning','Something Went Wrong!');
}
}
Sulfikardi
Web Design & Web Programming
Halo, saya seorang Web Developer yang terbiasa mengembangkan website
menggunakan HTML, CSS, Javascript, PHP, MYSQL, dan Laravel. Disini saya akan membagikan pengalaman saya dalam membangun dan mengembangan website yang responsif dan dinamis