Những gì bạn đang tìm kiếm, như bạn đề cập trong câu hỏi của mình, là chuỗi công việc.
Từ tài liệu Laravel
Chuỗi công việc cho phép bạn chỉ định một danh sách các công việc được xếp hàng đợi sẽ được chạy theo trình tự. Nếu một công việc trong chuỗi không thành công, các công việc còn lại sẽ không được chạy. Để thực hiện một chuỗi công việc đã được xếp hàng đợi, bạn có thể sử dụng phương thức withChain trên bất kỳ công việc nào có thể điều chỉnh được của mình:
ProcessPodcast::withChain([ new OptimizePodcast, new ReleasePodcast ])->dispatch();
Vì vậy, trong ví dụ của bạn ở trên
$mailJobs = Subscriptions::all()
->map(function($subscription) {
return new SendMailJob($subscription);
});
Job::withChain($mailJobs)->dispatch()
Sẽ cho kết quả như mong đợi!
Cập nhật
Nếu bạn không muốn sử dụng một công việc ban đầu để xâu chuỗi từ (như được hiển thị trong ví dụ tài liệu ở trên), bạn có thể tạo một Job
trống lớp có use Dispatchable;
. Sau đó, bạn có thể sử dụng ví dụ của tôi ở trên