Asked thg 3 19, 2019 4:42 SA 442 0 1
  • 442 0 1
+1

Hỏi về Transaction trong laravel

Share
  • 442 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

0
| Reply
Share

1 ANSWERS


Answered thg 3 21, 2019 9:50 SA
Accepted
+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

Share
thg 3 22, 2019 7:23 SA

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

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.