Laravel 10.31 Released
This week, the Laravel team released v10.31, the ability to place batches within job chains. You can run jobs sequentially, then parallelize a batch of jobs, and continue with the chain once that batch has been completed.
Allow placing a batch on a chain
Sebastien Armand added the ability to run batches of jobs within a job chain
This is a use case we encounter in a couple places at Square where we have a serial process of jobs that need to be handled and one or more of the steps either should be worked on in parallel or are of unknown length when initially triggering the workflow and will create additional jobs, but we need to know when this is finished to ensure we keep the chain going.
Here's an example from the updated Chains & Batches documentation, where you could first flush the cache, release a batch of podcasts, and then batch notifications of those podcasts:
use App\Jobs\FlushPodcastCache;
use App\Jobs\ReleasePodcast;
use App\Jobs\SendPodcastReleaseNotification;
use Illuminate\Support\Facades\Bus;
Bus::chain([
new FlushPodcastCache,
Bus::batch([
new ReleasePodcast(1),
new ReleasePodcast(2),
]),
Bus::batch([
new SendPodcastReleaseNotification(1),
new SendPodcastReleaseNotification(2),
]),
])->dispatch();
Sleep::until() handles string timestamps
James Hulse contributed the ability to pass a timestamp string to Sleep::until(), which will still ensure the value is numeric:
Sleep::until("1699411804");
Added support for Sec-Purpose header
@nanos contributed support for the Sec-Purpose header when relying on the $request->prefetch()
method:
Whilst most User Agents set Purpose: prefetch in prefetch requests, Firefox uses Sec-Purpose: prefetch in the latest version, as described in the above MDN article. This means that calling the ->prefetch() method on the request will return false for requests sent via the Firefox browser, regardless of prefetch status.
Release notes
You can see the complete list of new features and updates below and the diff between 10.30.0 and 10.31.0 on GitHub. The following release notes are directly from the changelog: