sql >> Base de Datos >  >> NoSQL >> Redis

Laravel - Ejecutar trabajos en secuencia

Lo que está buscando, como menciona en su pregunta, es el encadenamiento de trabajos.

De los documentos de Laravel

El encadenamiento de trabajos le permite especificar una lista de trabajos en cola que deben ejecutarse en secuencia. Si falla un trabajo en la secuencia, el resto de los trabajos no se ejecutarán. Para ejecutar una cadena de trabajos en cola, puede usar el método withChain en cualquiera de sus trabajos despachables:

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

Así que en tu ejemplo anterior

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

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

¡Debería dar el resultado esperado!

Actualizar

Si no desea utilizar un trabajo inicial para encadenar (como se muestra en el ejemplo de documentación anterior), debería poder crear un Job vacío. clase que tiene use Dispatchable; . Entonces puedes usar mi ejemplo anterior