Heim >Backend-Entwicklung >PHP-Tutorial >Transaktionen in Laravel
In bestimmten Fällen müssen wir eine Reihe aufeinanderfolgender Vorgänge ausführen, und es ist wichtig, dass alle erfolgreich abgeschlossen werden, ohne dass etwas zur Hälfte erledigt bleibt.
Ein häufiges Beispiel ist das Anlegen eines Benutzers, bei dem es unbedingt erforderlich ist, dass auch Rollen zugewiesen und eine Registrierungs-E-Mail gesendet werden.
Um solche Situationen zu bewältigen, werden Transaktionen verwendet. Hier ist eine Methode, die einen Benutzer erstellt, die Rolle zuweist und dann eine E-Mail über die Methode sendEmail() sendet. Diese Methode empfängt die E-Mail als Argument und sendet sie entsprechend.
use Illuminate\Support\Facades\DB; public function save(array $data) { try { $user = User::create($data); $user->syncRoles([$data['role']]); $this->sendEmail([ 'email' => $data['email'], ]); return $user; } catch (\Exception $e) { throw new BadRequestException("Error al guardar nuevo usuario"); } }
Wir müssen 3 Methoden anwenden:
Bei der Implementierung von Transaktionen im vorherigen Code bleibt uns Folgendes übrig:
use Illuminate\Support\Facades\DB; public function save(array $data) { // Iniciar la transacción DB::beginTransaction(); try { $user = User::create($data); $user->syncRoles([$data['role']]); $this->sendEmail([ 'email' => $data['email'], ]); // Confirmo la transacción DB::commit(); return $user; } catch (\Exception $e) { // Si falla hago rollback DB::rollback(); throw new BadRequestException("Error al guardar nuevo usuario"); } }
Damit stellen wir sicher, dass die Reihe von Operationen vollständig oder gar nicht ausgeführt wird.
Laravel bietet auch eine weitere konkretere Transaktionsmethode der DB-Fassade. In diesem Fall erfolgen Commit und Rollback automatisch. Dies wird empfohlen, wenn die Anzahl der Vorgänge gering ist oder keine zusätzlichen Vorgänge vor dem Rollback erforderlich sind
DB::transaction(function () use($data){ $user = User::create($data); $user->syncRoles([$data['role']]); $this->sendEmail([ 'email' => $data['email'], ]); return $user; });
Wichtig: Überlegungen zur Datenbank-Engine
Nicht alle Speicher-Engines unterstützen Transaktionen. InnoDB ist eine Engine, die Transaktionen unterstützt, MyISAM hingegen nicht. Es ist wichtig sicherzustellen, dass Ihre Datenbanktabellen eine Engine verwenden, die Transaktionen unterstützt, damit sie ordnungsgemäß funktionieren.
Das obige ist der detaillierte Inhalt vonTransaktionen in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!