Tranzacții SQL sigure cu DB::transaction() în Laravel în Laravel

eloquent Laravel 11.x / Database Q&A / Distribuie cod

Garantarea integrității ACID a bazei de date: executarea operațiunilor financiare sau compuse cu rollback automat la apariția excepțiilor.

Sintaxă
DB::transaction(function () { ... }, $attempts = 3)

Când o acțiune implică modificarea mai multor tabele corelate (de exemplu: scăderea banilor dintr-un cont și creditarea celuilalt cont), eșecul unei singure comenzi SQL poate lăsa baza de date într-o stare coruptă.

Metoda DB::transaction(Closure) încapsulează logica într-o tranzacție SQL atomică: dacă totul reușește, se execută COMMIT. Dacă apare vreo excepție, se execută instantaneu ROLLBACK, anulând toate modificările parțiale.

Exemplu: Transfer bancar securizat cu DB::transaction și blocare la citire
use Illuminate\Support\Facades\DB;

public function transferFunds(int $fromId, int $toId, float $amount)
{
    DB::transaction(function () use ($fromId, $toId, $amount) {
        $fromAccount = DB::table('accounts')->where('id', $fromId)->lockForUpdate()->first();

        if ($fromAccount->balance < $amount) {
            throw new \Exception('Fonduri insuficiente!');
        }

        DB::table('accounts')->where('id', $fromId)->decrement('balance', $amount);
        DB::table('accounts')->where('id', $toId)->increment('balance', $amount);
        
        DB::table('transfers')->insert([
            'from_id' => $fromId,
            'to_id' => $toId,
            'amount' => $amount,
            'created_at' => now(),
        ]);
    }, 5); // Reîncearcă de maxim 5 ori în caz de Deadlock
}

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Tranzacții SQL sigure cu DB::transaction() în Laravel

Ai o nelămurire despre utilizarea comenzii Tranzacții SQL sigure cu DB::transaction() în Laravel sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.