Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Transaksi dalam Laravel

Transaksi dalam Laravel

Susan Sarandon
Susan Sarandonasal
2024-10-22 08:07:02416semak imbas

Transacciones en laravel

Pada masa-masa tertentu, kami perlu menjalankan beberapa siri operasi berturut-turut, dan adalah penting untuk kesemuanya diselesaikan dengan jayanya, tanpa perlu separuh masa.

Contoh biasa ialah penciptaan pengguna, di mana peranan juga perlu ditetapkan dan e-mel pendaftaran dihantar.

Untuk mengendalikan jenis situasi ini, transaksi digunakan. Berikut ialah kaedah yang mencipta pengguna, menetapkan peranan, dan kemudian menghantar e-mel melalui kaedah sendEmail(). Kaedah ini menerima e-mel sebagai hujah dan menghantarnya sewajarnya.

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");
   }
}

Kita mesti menggunakan 3 kaedah:

  • DB::beginTransaction(); Mulakan transaksi
  • DB::commit(); Sahkan perubahan
  • DB::rollback(); Sekiranya sebarang operasi tidak dapat dilakukan, ia akan mengembalikan semua perubahan yang menjadikan keadaan sama seperti sebelum permulaan transaksi.

Melaksanakan urus niaga dalam kod sebelumnya yang kita tinggalkan:

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");
     }
 }

Dengan ini kami memastikan set operasi dilaksanakan sepenuhnya atau tidak sama sekali.

Laravel juga menyediakan satu lagi kaedah transaksi yang lebih konkrit bagi fasad DB. Dalam kes ini, komit dan rollback dilakukan secara automatik. Ini disyorkan apabila bilangan operasi sedikit atau tidak memerlukan operasi tambahan sebelum melakukan rollback

DB::transaction(function () use($data){

  $user = User::create($data);

  $user->syncRoles([$data['role']]);

  $this->sendEmail([
      'email' => $data['email'],
  ]);

  return $user;
});

Penting: Pertimbangan Enjin Pangkalan Data
Tidak semua enjin storan menyokong transaksi. InnoDB ialah enjin yang menyokong transaksi, manakala MyISAM tidak. Adalah penting untuk memastikan bahawa jadual pangkalan data anda menggunakan enjin yang menyokong transaksi agar jadual tersebut berfungsi dengan betul.

Atas ialah kandungan terperinci Transaksi dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn