2017-10-11 15 views
0

私の脳はこれを解決できないようだが、私の脳は今日これを解決できないようだが、誰かが同様の問題を解決しなければならないことを願っている。PHP/Laravel - 毎分10分コマンドを実行する

私のデータベースにはタイムスタンプ付きのさまざまなレコードがあります。

タイムスタンプの10分前には、アクションを実行して結果をフィールドに保存したいと考えています。

私はこれらのレコードを垂直に保存しておけば簡単に解決できることをよく承知しています。追加のフィールドを追加したいのですがtenminutesnineminutesなどがDBにありますしかし、ssshhh、ちょうどそれと一緒に行く!

分で[OK]を、ので、私の(擬似)コードは少しこのように読める:

// 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私は知らないのですか?何か案は?

その他の情報、これは毎分実行されるクーロンジョブの中にあります!ですから、もし私がLaravelsスケジューラーを使ってこのことを賢明にすることができれば、それは知っておくと良いでしょう!

+0

あなたは職人のコマンドを作成し、スケジューラ –

+0

こんにちはアレクセイとそれらを実行することができ、ええ、これは毎分 – dyatesupnorth

+0

を実行中の命令の内側にすでにある言及する必要があります。//は常に同じコードをdata'ゲット 'ですか? – apokryfos

答えて

1

異なる遅延を持つアイテムとディスパッチジョブを繰り返すことができますか?

$current = Carbon::now(); 

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

    $this->dispatch($job); 
} 

さらに詳しいドキュメントhereがあります。

+0

これはキューを使うのにとても便利ですが、この例では$ thingごとに異なる遅延を持つ10個のジョブをディスパッチする必要があります。 – Devon

+0

はい、そうですが、あまりにも過度の課税ではありません。 –

+0

ああ、ジョブ内では毎回別のデータベースフィールドを更新する必要があります。それは面倒なビットです – dyatesupnorth

関連する問題