【发布时间】:2020-05-30 21:53:27
【问题描述】:
我有这个将不断更新的数据库表。
game_id | end_time
现在我如何创建将在此 end_time 上运行的作业,作业将从第三方 API 获取一些数据,这些数据将依赖于此 game_id。
注意:每条记录的 game_id 和 end_time 都会发生变化。
我查找了任务计划程序,但找不到我认为仅适用于特定时间的信息。
【问题讨论】:
我有这个将不断更新的数据库表。
game_id | end_time
现在我如何创建将在此 end_time 上运行的作业,作业将从第三方 API 获取一些数据,这些数据将依赖于此 game_id。
注意:每条记录的 game_id 和 end_time 都会发生变化。
我查找了任务计划程序,但找不到我认为仅适用于特定时间的信息。
【问题讨论】:
是的,你可以使用 laravel 调度器来完成这个任务。您可以查看控制台命令类中的时间变量。 例如放入你的内核类:
$schedule->command('ApiConnection:get')->everyFiveMinutes();
在您的 ApiConnection 类(handle() 函数)中,您可以获得您的数据库记录:
Model::whereDate('end_time', '>=', Carbon::today())->get(); //format of Carbon function should be equal to your end_time column format, I mean I don't know if you use just date or date with time, etc
现在您应该可以按时间使用 game_id 数据了。
我还建议在你的数据库表中添加状态列,这样你就可以控制已经处理了哪些记录,如下所示:
$models = Model::whereDate('end_time', '>=', Carbon::today())->where('status', 'awaiting')->get();
foreach ($models as $model) {
$model->status = 'in progress';
...your api work here...
$model->status = 'completed';
}
【讨论】: