Database Transaction là gì?
Database Transaction cung cấp một Facade DB để chạy một tập hợp hoạt động trong một câu lệnh query, xử lý có tuần tự các thao tác trên cơ sở dữ liệu.
Nó cung cấp cho chúng ta khả năng mạnh mẽ để đảm bảo an toàn khi chạy các tập lệnh SQL, sửa đổi dữ liệu như chèn, cập nhật, xóa. Nó an toàn vì có thể khôi phục tất cả các câu truy vấn được thực hiện trước đó trong một tập các câu lệnh SQL.
Tại sao sử dụng Database Transaction
Cùng kiểm tra chúng ta có ứng dụng màn quản trị viên có thể xem tất cả các bài đăng và người dùng đó, được liên kết với nhau. Khi quản trị viên xóa bài Post của user, và nếu bất kỳ hoạt động nào fail chúng ta cần khôi phục lại hoạt động trước đó để ngăn chặn sự cố gây ra lỗi và gửi lại thông báo lỗi cho quản trị viên.
Ví dụ tình huống gây ra sự cố:
// xóa user và tất cả danh sách bài post của user
$user = auth()->user();

$user->posts();
$user->delete();
Trong ví dụ trên user sẽ bị xóa nhưng bài posts thì không bị xóa, vì vậy sẽ dẫn đến lỗi, nơi chúng ta đang sử dụng user_id của bài đăng hoặc những bài đăng này vẫn còn trong cơ sở dữ liệu hiện không được sử dụng và không cần thiết. Để ngăn điều này, chúng ta sử dụng DB Transaction, vì vậy nếu bài viết không bị xóa thì không thể xóa người dùng của nó và nó sẽ khôi phục lại transaction.
// xóa user và bài viết
DB::transaction( function () {
$user = auth()->user();

$user->posts()->delete();
$user->delete();
})
Đây là cách chugns ta có thể xử lý vấn đề DB Transaction. Nếu cả hai transaction thành công thì sẽ trả về thông báo thành công.Chúng ta có thể viết như sau:
// Bắt đầu các hành động trên CSDL
DB::beginTransaction();
...
// Commit dữ liệu khi hoàn thành kiểm tra
DB::commit();
...
// Gặp lỗi nào đó mới rollback
DB::rollback();
...
Link tham khảo: link








0 nhận xét:
Đăng nhận xét