Yêu cầu thg 3 19, 2019 4:42 SA 392 0 1
  • 392 0 1
+1

Hỏi về Transaction trong laravel

Chia sẻ
  • 392 0 1

Các bác cho em hỏi khi em tạo transaction để tạo seeder thì gặp lỗi. Bình thường theo đúng của transaction thì nó sẽ trở về khi chưa thực hiện, nhưng khi em User::truncate(); thì nó bị xóa luôn dữ liệu của bảng trong khi chạy User->first()->delete(); thì đúng. Vậy nguyên nhân là do đâu ạ. Và hướng giải quyết khi truncate() sai thì rollback dữ liệu đúng ạ. Em cám ơn

Avatar Phạm Thảo @cr_ronaldo16396
thg 3 19, 2019 10:36 SA

Truncate trong mysql ko xử dụng được với transaction, nếu sử dùng delete thì sẽ được

1 CÂU TRẢ LỜI


Đã trả lời thg 3 21, 2019 9:50 SA
Đã được chấp nhận
+1

Với mysql 5.1 đổ lên thì:

  1. TRUNCATE đã không còn là DML nữa mà DDL nhằm tối ưu hiệu suất.
  2. DELETE vẫn còn là một DML. Tức là khi TRUNCATE thì sẽ tạo ra một commit transaction block (DML) nên sẽ không back lại dữ liệu trước được, còn DELETE thì vẫn có thể rollback được.

Phương hướng giải quyết: Thay vì sử dụng TRUNCATE thì sử dụng eloquen query:

User::whereNotNull('id')->delete();

Xem thêm tại: https://dev.mysql.com/doc/refman/8.0/en/truncate-table.html

Chia sẻ
thg 3 22, 2019 7:23 SA

thank you! đúng cái mình cần. 👍👍

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí