Redis
 sql >> Base de données >  >> NoSQL >> Redis

Laravel - Exécuter des tâches en séquence

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