Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Laravel - Ausführen von Jobs in Sequenz

Was Sie suchen, ist, wie Sie in Ihrer Frage erwähnen, die Verkettung von Jobs.

Aus den Laravel-Dokumenten

Durch die Jobverkettung können Sie eine Liste von Jobs in der Warteschlange angeben, die nacheinander ausgeführt werden sollen. Wenn ein Job in der Sequenz fehlschlägt, werden die restlichen Jobs nicht ausgeführt. Um eine Job-Kette in der Warteschlange auszuführen, können Sie die withChain-Methode für jeden Ihrer zuteilbaren Jobs verwenden:

ProcessPodcast::withChain([
    new OptimizePodcast,
    new ReleasePodcast
])->dispatch();

Also in Ihrem obigen Beispiel

$mailJobs = Subscriptions::all()
    ->map(function($subscription) {
        return new SendMailJob($subscription);
    });

Job::withChain($mailJobs)->dispatch()

Sollte das erwartete Ergebnis liefern!

Aktualisieren

Wenn Sie keinen anfänglichen Job zum Verketten verwenden möchten (wie im obigen Dokumentationsbeispiel gezeigt), sollten Sie in der Lage sein, einen leeren Job zu erstellen Klasse, die use Dispatchable; verwendet . Dann können Sie mein obiges Beispiel verwenden