ORM yang fasih cukup bagus, meskipun saya bertanya-tanya apakah ada cara mudah untuk mengatur transaksi MySQL menggunakan innoDB dengan cara yang sama seperti PDO, atau apakah saya harus memperluas ORM untuk memungkinkannya?
96
Kamu bisa melakukan ini:
DB::transaction(function() {
//
});
Segala sesuatu di dalam Penutupan dijalankan dalam transaksi. Jika pengecualian terjadi, ia akan melakukan rollback secara otomatis.
Discussed in more detail here
link sudah mati.Jika Anda tidak menyukai fungsi anonim:
Pembaruan : Untuk laravel 4,
pdo
objeknya tidak lagi publik jadi:sumber
DB::beginTransaction()
&DB::commit()
&DB::rollback()
. Itu akan sedikit lebih bersih.DB::connection()->getPdo()->beginTransaction();
DB::transaction
dengan callback bahkan lebih bersih tetapi kekurangannya adalah jika Anda perlu menentukan penangan yang berbeda untuk pengecualian yang berbeda, Anda harus kembali untuk mencoba / menangkap teknikJika Anda ingin menggunakan Eloquent, Anda juga dapat menggunakan ini
Ini hanya contoh kode dari proyek saya
sumber
question->id
ekspresi di balik transaksi kembali nol.Jika Anda ingin menghindari penutupan, dan senang menggunakan fasad, hal-hal berikut ini menjaga agar tetap bagus dan bersih:
Jika ada pernyataan yang gagal, komit tidak akan pernah berhasil, dan transaksi tidak akan diproses.
sumber
Saya yakin Anda tidak mencari solusi penutupan, coba ini untuk solusi yang lebih ringkas
sumber
Untuk beberapa alasan cukup sulit untuk menemukan informasi ini di mana pun, jadi saya memutuskan untuk mempostingnya di sini, karena masalah saya, sementara terkait dengan transaksi Eloquent, benar-benar mengubah ini.
Setelah membaca jawaban stackoverflow INI , saya menyadari tabel database saya menggunakan MyISAM, bukan InnoDB.
Agar transaksi dapat berfungsi di Laravel (atau di mana pun yang terlihat), tabel Anda harus diatur untuk menggunakan InnoDB
Mengapa?
Mengutip dokumen Transaksi MySQL dan Operasi Atom (di sini ):
sumber
Jika terjadi pengecualian, transaksi akan dibatalkan secara otomatis.
Format transaksi Laravel Basic
sumber