Ce que vous recherchez, comme vous le mentionnez dans votre question, c'est l'enchaînement des emplois.
À partir de la documentation Laravel
Le chaînage des travaux vous permet de spécifier une liste de travaux en file d'attente qui doivent être exécutés dans l'ordre. Si une tâche de la séquence échoue, les autres tâches ne seront pas exécutées. Pour exécuter une chaîne de travaux en file d'attente, vous pouvez utiliser la méthode withChain sur n'importe lequel de vos travaux dispatchables :
ProcessPodcast::withChain([ new OptimizePodcast, new ReleasePodcast ])->dispatch();
Donc dans votre exemple ci-dessus
$mailJobs = Subscriptions::all()
->map(function($subscription) {
return new SendMailJob($subscription);
});
Job::withChain($mailJobs)->dispatch()
Devrait donner le résultat attendu !
Mettre à jour
Si vous ne souhaitez pas utiliser un travail initial pour enchaîner (comme indiqué dans l'exemple de documentation ci-dessus), vous devriez pouvoir créer un Job
vide classe qui a use Dispatchable;
. Ensuite, vous pouvez utiliser mon exemple ci-dessus