Yêu cầu Jun 6th, 2022 7:44 a.m. 200 0 2
  • 200 0 2
+1

Lỗi DB::transaction trong Laravel

Chia sẻ
  • 200 0 2

Cho mình hỏi mình có DB::transaction

DB::transaction(function () {
            DB::table('posts')->delete();
            DB::table('category')->delete(); // bảng này không tồn tại
        });

Kết quả khi chạy là bảng posts bị xóa hết dữ liệu và báo lỗi không tồn tại bảng category. Mình thắc mắc là tại sao khi đã dùng transaction rồi mà khi gặp lỗi nó không hề rollback về trang thái trước khi thực hiện .

Transaction trong SQL là một nhóm các câu lệnh SQL, xử lý có tuần tự các thao tác trên cơ sở dữ liệu . Nếu một transaction được thực hiện thành công, tất cả các thay đổi dữ liệu được thực hiện trong transaction được lưu vào cơ sở dữ liệu. Nếu một transaction bị lỗi và được rollback thì tất cả các sửa đổi dữ liệu sẽ bị xóa (dữ liệu được khôi phục về trạng thái trước khi thực hiện transaction).

Thanks

2 CÂU TRẢ LỜI


Đã trả lời Jun 6th, 2022 8:51 a.m.
Đã được chấp nhận
+5

Bạn kiểm tra lại xem bảng posts , category của bạn đang để Storage Engine là kiểu gì nếu là kiểu MyISAM thì không hỗ trợ transaction. Bạn nên đổi sang kiểu InnoDB

Chia sẻ
Avatar LongThanh @LongThanh.it
Jun 6th, 2022 9:18 a.m.

Thanks. Do kiểu MyISAM. Mình đổi InnoDB thì nó chạy rồi. Cảm ơn bạn.

Jun 9th, 2022 3:48 a.m.

@LongThanh.it hhhhhhhhhhhhhhh

Đã trả lời Jun 6th, 2022 8:33 a.m.
+1

Bạn dùng theo cách thủ công or thêm tham số thứ 2 vào sau thử:

DB::beginTransaction();
try {
        DB::table('posts')->delete();
        DB::table('category')->delete();
        
        DB::commit();
} catch (Exception $e) {
        DB::rollBack();
        //do something
    }
Chia sẻ
Jun 9th, 2022 3:48 a.m.

hhhhhhhhhhhh

Jun 9th, 2022 3:49 a.m.

@CHAUTU hhhhhhhhhhhhhhh

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í