Yêu cầu thg 6 6, 2022 7:44 SA 183 0 2
  • 183 0 2
+1

Lỗi DB::transaction trong Laravel

Chia sẻ
  • 183 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 thg 6 6, 2022 8:51 SA
Đã đượ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
thg 6 6, 2022 9:18 SA

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

thg 6 9, 2022 3:48 SA

@LongThanh.it hhhhhhhhhhhhhhh

Đã trả lời thg 6 6, 2022 8:33 SA
+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ẻ
thg 6 9, 2022 3:48 SA

hhhhhhhhhhhh

thg 6 9, 2022 3:49 SA

@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í