Heim  >  Artikel  >  Backend-Entwicklung  >  Transaktionen in Laravel

Transaktionen in Laravel

Susan Sarandon
Susan SarandonOriginal
2024-10-22 08:07:02416Durchsuche

Transacciones en 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:

  • DB::beginTransaction(); Starten Sie eine Transaktion
  • DB::commit(); Bestätigen Sie die Änderungen
  • DB::rollback(); Falls eine Operation nicht ausgeführt werden kann, werden alle Änderungen rückgängig gemacht, sodass der Status derselbe ist wie vor dem Start der Transaktion.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn