To, co hledáte, jak uvádíte ve své otázce, je řetězení práce.
Z dokumentů Laravel
Zřetězení úloh vám umožňuje zadat seznam úloh ve frontě, které by se měly spouštět postupně. Pokud jedna úloha v posloupnosti selže, zbývající úlohy nebudou spuštěny. Chcete-li provést řetězec úloh ve frontě, můžete použít metodu withChain pro kteroukoli z vašich úloh, které lze odeslat:
ProcessPodcast::withChain([ new OptimizePodcast, new ReleasePodcast ])->dispatch();
Takže ve vašem příkladu výše
$mailJobs = Subscriptions::all()
->map(function($subscription) {
return new SendMailJob($subscription);
});
Job::withChain($mailJobs)->dispatch()
Mělo by přinést očekávaný výsledek!
Aktualizovat
Pokud nechcete použít počáteční úlohu k řetězení (jak je znázorněno v příkladu dokumentace výše), měli byste být schopni vytvořit prázdnou Job
třída, která má use Dispatchable;
. Pak můžete použít můj příklad výše