Belajar Laravel (Chapter 6 | Tutorial Database Transactions)
Database Transactions merupakan suatu proses yang menghandle group transaksi. Misalkan pada alur transfer uang dari rekening pengirim ke rekening penerima pada suatu bank terdapat beberapa transaksi:
- Mengurangi saldo dari rekening pengirim.
- Menambah saldo pada rekening penerima.
- Menulis log history transaksi
- Mengirim notifikasi
Semua proses diatas harus berhasil semuanya, apabila proses berhenti dinomor 2, maka saldo pengirim sudah dikurangi tapi saldo penerima belum ditambah.
Dengan menggunakan Database Transactions akan ada validasi apakah semua proses berjalan dengan benar. Setiap item pada group transaksi harus sukses eksekusi, jika ada item proses yang gagal, maka semua proses di kembalikan.
Scope of This Chapter
Pada chapter ini kita akan belajar tentang fitur Database Transactions yang terdapat pada Laravel 7.x
Automatically Transactions
DB::transaction(function () {
DB::table(‘posts’)->update([‘is_comment’ => 0]); DB::table(‘comment’)->delete();
});
method transaction pada DB facade akan menjalankan perintah database transaction. Jika proses berhasil maka transaksi otomatis dicommit. Jika proses gagal maka transaksi akan dirollback.
Manually Transactions
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;class PostController extends Controller
{
public function insert(Request $request)
{
// Begin Transaction
DB::beginTransaction(); try { DB::table(‘posts’)->update([‘is_comment’ => 0]);
DB::table(‘comment’)->delete();
// Commit Transaction
DB::commit();
// Semua proses benar } catch (Exception $e) { // Rollback Transaction
DB::rollback();
// ada yang error }
}
}
kita menggunakan method beginTransaction(), commit(), rollback().
Database Transactions with Eloquent
Menggunakan database transactions dengan Eloquent bisa dengan syntax :
DB::transaction(function() {
//
});
Berikut contohnya
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\User;
use App\Post;class PostController extends Controller
{
/**
* Contoh Database Transactions dengan Eloquent
*
* @return Response
*/ public function insert()
{ DB::transaction(function () { $user = User::find(1);
// insert post
$post = new Post;
$post->user_id = $user->id;
$post->title = ‘Jakarta lockdown’;
$post->category_id = 1;
$post->save(); // update data user
$user->total_post = $user->total_post + 1;
$user->save();
});
}
}
Jika ingin menambahkan parameter pada DB::transaction() bisa menggunakan use
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\User;
use App\Post;class PostController extends Controller
{
/**
* Contoh Database Transactions dengan Eloquent
*
* @return Response
*/ public function insert(Request $request)
{
$user = User::find(1); DB::transaction(function() use ($user, $request) { // insert post
$post = new Post;
$post->title = $request->input(‘title’);
$post->category_id = $request->input(‘category_id’);
$post->save(); // update data user
$user->total_post = $user->total_post + 1;
$user->save();
});
}
}
Next Chapter
Database: Migrations : https://medium.com/dotlocal/belajar-laravel-chapter-7-tutorial-database-migrations-5e73753349b8
Referensi
Support the Author
Jika suka dengan artikel ini, bisa support saya ditautan berikut ini https://karyakarsa.com/tobidsn :)
Cheers
Tobi Ahmad
Founder of Dot Local