To, czego szukasz, jak wspomniałeś w swoim pytaniu, to łańcuch pracy.
Z dokumentacji Laravela
Tworzenie łańcucha zadań umożliwia określenie listy zadań w kolejce, które powinny być uruchamiane po kolei. Jeśli jedno zadanie w sekwencji nie powiedzie się, pozostałe zadania nie zostaną uruchomione. Aby wykonać łańcuch zadań w kolejce, możesz użyć metody withChain na dowolnym z zadań wysyłalnych:
ProcessPodcast::withChain([
new OptimizePodcast,
new ReleasePodcast
])->dispatch();
Tak więc w powyższym przykładzie
$mailJobs = Subscriptions::all()
->map(function($subscription) {
return new SendMailJob($subscription);
});
Job::withChain($mailJobs)->dispatch()
Powinien dać oczekiwany rezultat!
Aktualizacja
Jeśli nie chcesz używać początkowego zadania do połączenia (jak pokazano w powyższym przykładzie dokumentacji), powinieneś być w stanie utworzyć puste Job
klasa, która ma use Dispatchable;
. Następnie możesz użyć mojego przykładu powyżej