umutcankarce Eğer tek seferde birden fazla insert, update, delete, upsert, truncate... gibi kayıtları değiştiren işlem yapıyorsanız bunları transaction içinde yapmanız lazım. Herhangi birinde bir hata meydana gelirse tüm işlemler geri alınacak:
$user = DB::transaction(function() use ($updateData, $teamIds) {
// Burada bir hata meydana gelirse veri tabanı işlemi geri alınacak
$user->update($updateData);
// Burada bir hata meydana gelirse veri tabanı işlemi geri alınacak
$user->teams
->sync($teamIds);
return $user;
});
DB::transaction() yönteminin ikinci parametresi işlemin kaç kere tekrar deneneceğini belirtir:
DB::transaction(function() {
//...
}, 3);
Üstteki örnekten yola çıkarsak, bir transaction başlattığınızda eğer ki aynı anda başka bir işlem kullanıcıyı güncellemeye çalışırsa deadlock hatası alırsınız. İşte, deadlock hatası alınca tekrar denemesi için deneme sayısı veriyorsunuz. Örneğe göre 3 kere deneyecek.