Pessimistic locking berguna ketika dua request dapat membaca dan mengubah record yang sama. Laravel memperkenalkan refreshForUpdate() untuk membantu mengambil ulang model sekaligus meminta lock pada transaksi database. Pola ini relevan untuk stok, saldo, booking, dan counter yang tidak boleh mengalami lost update.
Contoh implementasi
DB::transaction(function () use ($orderId) {
$order = Order::findOrFail($orderId);
$order->refreshForUpdate();
if ($order->status !== "pending") {
throw new DomainException("Order sudah diproses");
}
$order->update(["status" => "paid"]);
});Catatan developer
Teknologi ini sebaiknya diuji pada workload nyata, bukan hanya benchmark. Periksa kompatibilitas dependency, biaya, latency, observability, privasi data, dan strategi rollback sebelum dipakai di production.
Kesimpulan
Pembaruan ini membuka peluang baru, tetapi hasil akhirnya tetap bergantung pada desain aplikasi, pengujian, dan keputusan engineering yang bertanggung jawab.
Sumber asli:
https://laravel-news.com/laravel-refresh-for-update