Asked Mar 19th, 2019 4:42 a.m. 363 0 1
  • 363 0 1
+1

Hỏi về Transaction trong laravel

Share
  • 363 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
Mar 19th, 2019 10:36 a.m.

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 Mar 21st, 2019 9:50 a.m.
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
Mar 22nd, 2019 7:23 a.m.

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

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