CakePhp:阻止同时插入相同信息的重复调用

时间:2016-08-29 18:41:33

标签: php mysql cakephp

我使用CakePhp作为中间API,在不同的市场中同步库存并保存订单历史记录。当在一个市场上下订单时,它会更新另一个市场上的库存,反之亦然。现在,我收到了其中一个市场的通知,告知我的API订单刚刚进入。问题是这些通知是在两个单独的时间发送的,同时具有完全相同的信息。我的API同时运行这两个单独的calles并生成两个插入。我有一个代码,它检查传入订单中的Order_ID是否在我保存其插入的订单历史记录的表上没有重复。但由于调用是在完全相同的时间进行的,当代码检查Order_ID是否存在时,它不会因此创建两个不同的插入并且订单重复。

通知几乎完全相同,我收到了:

{  
   "resource":"\/orders\/order_id",
   "user_id":"user_id",
   "topic‌​":"orders",
   "applicat‌​ion_id":idhere,
   "atte‌​mpts":1,
   "sent":"2016‌​-07-26T14:34:00.342Z‌​",
   "received":"2016-0‌​7-26T14:34:00.338Z"
}‌

在一个通知上,另一个通知具有相同的信息,但在第一个通知中发送和接收的差异小于1秒。有了它,我使用order_id从订单中调用信息并将其保存到历史表中。

我需要的是一种方法,要么延迟一个发生,所以检查我工作正常或另一种方式来检查重复的order_id。值得注意的是,它不是一次调用中的两个插入。有两个单独的通知调用,这使得我的代码在复制时很难获得。我有什么想法可以试试吗?

1 个答案:

答案 0 :(得分:1)

它有点难看,但您可以在历史记录表中的Order_ID列上创建唯一索引。

这样,具有相同Order_ID的插入就不会成功。