PHP / Laravel - 每分钟执行一次命令十分钟

时间:2017-10-11 13:27:55

标签: php laravel

道歉,如果答案很简单,但我的大脑今天似乎无法解决这个问题,我希望有人不得不解决类似问题。

因此,在我的数据库中,我有各种带时间戳的记录。

在时间戳之前的10分钟内,我想执行一个操作并将结果存储在一个字段中。

我很清楚,如果我只是垂直存储这些记录,这很容易解决,因为我希望在数据库中有额外的字段tenminutes nineminutes等 - 我知道这可能是糟糕的数据库设计,但ssshhh,就这样吧!

好的,所以我的(伪)代码在这一刻读得有点像这样:

// In a command that is executed every minute using the scheduler....
$current = Carbon::now();

foreach ($things as $thing) {

    if ($thing->thingStartTime->diffInMinutes($current) <= -10) {

               //Get data

               //Update table field `tenminutes`
    }

    if ($thing->thingStartTime->diffInMinutes($current) <= -9) {

               //Get data

               //Update table field `nineminutes`
    }
}

你能看出这会变得多么可怕吗?

我正在思考一个关联数组的行,循环遍历它,并且有一种'tenminutes' => 10事情正在发生?

或者是否有一种更有趣的方法来使用我不知道的carbon?有什么想法吗?

其他信息,这是每分钟执行的一个cron作业!因此,如果我可以使用Laravels调度程序来熟悉这一点,那就太棒了!

1 个答案:

答案 0 :(得分:1)

您可以迭代这些项目并调度具有不同延迟的作业吗?

$current = Carbon::now();

foreach ($things as $thing) {
    $delayTime = $current - $thing->thingStartTime;
    $job = (new SendReminderEmail($user))->delay($delayTime);

    $this->dispatch($job);
}

还有更多文档here

相关问题