Redis
 sql >> Database >  >> NoSQL >> Redis

Laravel - Esecuzione di lavori in sequenza

Quello che stai cercando, come dici nella tua domanda, è il concatenamento del lavoro.

Dai documenti di Laravel

Il concatenamento dei lavori consente di specificare un elenco di lavori in coda che devono essere eseguiti in sequenza. Se un lavoro nella sequenza ha esito negativo, il resto dei lavori non verrà eseguito. Per eseguire una catena di lavori in coda, puoi utilizzare il metodo withChain su uno qualsiasi dei tuoi lavori inviabili:

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

Quindi nel tuo esempio sopra

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

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

Dovrebbe dare il risultato atteso!

Aggiorna

Se non vuoi usare un lavoro iniziale da cui concatenare (come mostrato nell'esempio di documentazione sopra) dovresti essere in grado di creare un Job vuoto classe che ha use Dispatchable; . Quindi puoi usare il mio esempio sopra