Bài toán: Cấp API tạo đơn hàng. Đối tác truyền mã đơn hàng lên. Mã đơn hàng không được trùng lặp trên hệ thống.
Cách 1: Đánh index unique trường code của bảng orders
Cách 2: Kiểm tra trước khi tạo, nhưng chú ý sử dụng lock và transaction để nếu có nhiều request cùng code gửi lên 1 lúc thì cũng chỉ tạo 1 đơn hàng.
DB::beginTransaction();
$o = DB::table('orders')->where('code', 'X7TZ12')->lockForUpdate()->first();
if (!$o) {
return 'already exists';
}
// create order
$idNewOrder = DB::table('orders')->insertGetId($order);
DB::commit();