2017-10-11 97 views
0

如果答案是簡單的,但我的大腦今天似乎無法解決這個問題,我很抱歉,我希望有人不得不解決類似的問題。PHP/Laravel - 每分鐘執行命令十分鐘

因此,在我的數據庫中,我有各種記錄與時間戳。

在時間戳之前10分鐘,我想執行一個操作並將結果存儲在一個字段中。

我很清楚,如果我只是垂直存儲這些記錄,因爲它是我想在db中有額外的字段tenminutesnineminutes等 - 我知道這可能是壞的DB設計但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調度程序來做到這一點,那麼很容易知道!

+0

您可以創建工匠命令並使用調度程序運行它們 –

+0

嗨Aleksei,是的,應該提到這已經存在於每分鐘執行的命令中 – dyatesupnorth

+0

//獲取數據始終是相同的代碼? – apokryfos

回答

1

您可以遍歷項目並調度具有不同延遲的作業嗎?

$current = Carbon::now(); 

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

    $this->dispatch($job); 
} 

還有更多文檔here

+0

這是使用隊列的一個非常好的方式,但在這個例子中,你需要派發10個作業,每個$ thing有不同的延遲,對吧? – Devon

+0

是的,你會的,但它不應該太重稅。 –

+0

啊,但是在工作內部,每次都需要更新一個不同的數據庫字段,這是一個棘手的問題 – dyatesupnorth