Menggunakan Transaction di Laravel
Tidak jarang dalam sebuah aplikasi akan ada sebuah proses CRUD yang terkait antara satu dengan yang lainnya, misalnya, ada dua tabel, user dan profile, di mana tabel profile diisi setelah tabel user selesai diproses dikarenakan tabel profile membutuhkan userid dari tabel user. Maka codingnya kurang lebih seperti ini di laravel.
<?php $user = User::create($data); $data_profile["userid"] = $user->id; $profile = Profile::create($data_profile);
Sehingga data profile seharusnya konsisten dengan data user, karena saat user dibuat begitupun dengan profile.
Tapi kadang-kadang ada sebuah hal – entah itu koneksi hilang atau masalah lainnya – yang membuat setelah user berhasil diproses tapi profile gagal dieksekusi, sehingga akhirnya data tidak konsisten karena data di user ada di profile tidak. Disinilah transaction berguna.
Transaction
sederhananya adalah blok proses yang memungkinkan kita untuk membatalkan sebuah proses jika ada proses lain yang gagal. Polanya kurang lebih seperti ini :
Transaction
blok proses
commit
if error
rollback
Commit
di sana artinya bahwa proses benar-benar berhasil sedangkan rollback
artinya membatalkan semua proses. Akhirnya jika ini diterapkan ke laravel, coding akhirnya akan seperti ini.
<?php DB::beginTransaction(); try { $user = User::create($data); $data_profile["userid"] = $user->id; $profile = Profile::create($data_profile); DB::commit(); return true; // all good } catch (\Exception $e) { DB::rollback(); // something went wrong return $e; }