Laravel应用程序创建事件以更新数据库表

时间:2018-03-22 06:52:16

标签: php mysql laravel

我正在Laravel开发一个应用程序,我订购的概念将由买家发布以购买特定商品。我的订单生命周期为5分钟。该订单将通知最靠近买方所在地的卖家。完成5分钟后需要查看已查看的卖家列表,然后需要将订单状态更改为超时。我必须在VPS中托管的Laravel应用程序中执行此操作。我可以通过使用订单日期时间和当前日期时间创建事件来收听订单并更新状态。现在我有一个像下面这样的代码并手动触发这个API,有没有其他方法可以自动执行此操作。请帮助任何人

$postrequests = Buyrequest::where('request_closed' , 0)->whereDate('request_on', '=', date('Y-m-d'))->get();
        if(count($postrequests) >0){
            $trade_execution = Adminsetting::where('id_admin_settings', 1)->selectRaw("TIME_TO_SEC(trade_execution_time) / 60 as trade_execution_time")->first();
        }
        foreach($postrequests as $request){
            if(Carbon::createFromFormat('Y-m-d H:i:s', $request->request_on) < Carbon::now()->subMinutes($trade_execution->trade_execution_time)->toDateTimeString()){
                if($request->request_status == 0){
                    Buyrequest::where('id_buyrequest', $request->id_buyrequest)->update(['request_status' => 2, 'request_closed' => 1]);
                }else{
                    Buyrequest::where('id_buyrequest', $request->id_buyrequest)->update(['request_closed' => 1]);
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

您可以设置queue worker来处理这种情况。如果创建了购买请求,那么您可以dispatch job并将其延迟到5分钟,然后工人将在5分钟后消耗它。

dispatch((new BuyRequestJob($buyRequestId))->delay(now()->addMinutes(5));