+1
Hỏi về Transaction trong laravel
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
1 CÂU TRẢ LỜI
+1
Với mysql 5.1 đổ lên thì:
- TRUNCATE đã không còn là DML nữa mà DDL nhằm tối ưu hiệu suất.
- 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
thank you! đúng cái mình cần.
Truncate trong mysql ko xử dụng được với transaction, nếu sử dùng delete thì sẽ được