【问题标题】:Laravel application create event to update database tableLaravel 应用程序创建事件以更新数据库表
【发布时间】:2018-03-22 15:32:17
【问题描述】:

我正在 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]);
                }
            }
        }

【问题讨论】:

  • 可以使用任务调度(即cron作业)
  • 我可以用请求头调用 cron 作业吗?因为在我的 Lumen API 中,我为请求创建了身份验证。我也可以每秒运行 cron 吗?性能方面会有什么问题吗?

标签: php mysql laravel


【解决方案1】:

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

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

【讨论】:

  • 是的,我这样想只是为了延迟作业队列并更新作业文件数据库表中的状态。但是我觉得是否会发生任何性能问题?因为职位发布经常发生,如果我发布 100 或 1000 等的职位队列意味着是否会发生任何问题?
  • 1k 个工作量太少了,因为工作量很低,不会引起问题,除非达到 100k 或……然后你需要考虑增加工人数量来消耗工作量。
  • 并且该作业只有几个查询并且应该立即完成,延迟作业仅存储在队列中并且没有任何工作负载使用=没有性能问题。
  • 我可以在队列类中使用 eloquent ORM,以便我可以在该类中更新 Buyrequest 状态吗?有可能吗?
  • 是的,就像你在控制器中所做的一样,可以检查 laravel 文档(生成作业类)laravel.com/docs/5.6/queues#generating-job-classes
猜你喜欢
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-08-09
  • 2012-03-31
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多