Transaksi dalam Laravel

Susan Sarandon
Lepaskan: 2024-10-22 08:07:02
asal
414 orang telah melayarinya

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");
   }
}
Salin selepas log masuk

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");
     }
 }
Salin selepas log masuk

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;
});
Salin selepas log masuk

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!

sumber:dev.to
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!