ユーザーの電子メール警告機能があります。毎日または毎週アラートを取得するかどうかをアクティブにすることができます。アラートテーブルで は、私は列があります。ここで私は電子メールを送信し、送信され、時間を節約Laravel - データベースベースの間隔でタスクを実行します
public function handle()
{
$user = Alert::select('alerts.id', 'search', 'email', 'interval', 'emailSentAt')->join('users', 'alerts.uid', '=', 'users.id')->whereNotNull('search')->distinct()->get();
foreach ($user as $u) {
$cl = new SphinxSearch();
$results = $cl->search('@*' . $u->search, 'spots');
$results = $cl->limit(10);
$results = $cl->setMatchMode(\Sphinx\SphinxClient::SPH_MATCH_EXTENDED);
$results = $cl->setSortMode(\Sphinx\SphinxClient::SPH_SORT_ATTR_DESC, "start");
$results = $cl->get();
Mail::send('emails.newSearchAlert', ['u' => $u, 'results' => $results], function ($m) use ($u) {
$m->from('[email protected]', 'My Company');
$m->to($u->email)->subject('Your search alert - ' . $u->search);
});
$u->emailSentAt = Carbon::now();
$u->save();
}
}
:UID(ユーザーID)、間隔、SEARCHTERM、emailSentAt、等...だから
を、私は、このコマンドを持っていますemailSentAt
欄に記載されています。 0(毎日)と1(週次):
とデータベース内のinterval
列については
protected function schedule(Schedule $schedule)
{
$schedule->command('email:user')->dailyAt('13:00');
}
Kernel.php
で 私は2つの値を持っています。インターバル列に基づいてこのコマンドを実行するにはどうすればよいですか?ユーザーが0の場合は毎日13:00にメールを送信したい、1回は週に1回送信したい。
私はあなたがこの問題に関する間違ったアプローチを持っていると思います。 スケジュールコマンドを「毎日」実行するのではなく、コマンド自体で電子メールを送信するためのチェックを行うのはなぜですか? 「last_sent_date」などのように、これに余分なフィールドが必要なことがあるので、最後にメールを送信してから何日経っているかを計算することができます。 – alexr