Ich habe E-Mail-Alarm-Funktion für Benutzer. Sie können aktivieren, ob sie Warnungen täglich oder wöchentlich erhalten möchten. In Benachrichtigungen Tabelle I Spalten: uid (Benutzer-ID), Intervall, search, emailSentAt, etc ...Laravel - Aufgabe in Intervall basierend auf Datenbank
So habe ich diesen Befehl ein:
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();
}
}
Hier habe ich E-Mails senden und die gesendete Zeit sparen in emailSentAt
Spalte.
Und in Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->command('email:user')->dailyAt('13:00');
}
Für interval
Spalte in der Datenbank habe ich zwei Werte: 0 (täglich) und 1 (wöchentlich).
Wie kann ich diesen Befehl basierend auf Intervall Spalte ausführen? Wenn der Benutzer 0 hat, möchte ich ihm jeden Tag um 13:00 Uhr eine E-Mail senden, und 1 möchte ich wöchentlich senden.
$schedule->command('email:user', ['weekly'=> true])->weekly('15:00');
Und dann in handle() i dieses füge hinzu:
Ich glaube, Sie haben einen falschen Ansatz zu diesem Thema. Warum führen Sie nicht täglich den Befehl "schedule" aus, sondern führen Sie die Überprüfungen durch, um die E-Mail im Befehl selbst zu senden. Sie benötigen wahrscheinlich ein zusätzliches Feld wie "last_sent_date" oder so, damit Sie (einfach mit Carbon) berechnen können, wie viele Tage seit dem letzten Versand vergangen sind. – alexr