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),
]),
])->then(function () {
// ...
})->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:
v10.31.0
* [10.x] Allow Sleep::until() to be passed a timestamp as a string by @jameshulse in
https://github.com/laravel/framework/pull/48883
/>
* [10.x] Fix whereHasMorph() with nullable morphs by @MarkKremer in
https://github.com/laravel/framework/pull/48903
/>
* [10.x] Handle class_parents returning false in class_uses_recursive by @RoflCopter24 in
https://github.com/laravel/framework/pull/48902
/>
* [10.x] Enable default retrieval of all fragments in fragments() and fragmentsIf() methods by @tabuna in
https://github.com/laravel/framework/pull/48894
/>
* [10.x] Allow placing a batch on a chain by @khepin in
https://github.com/laravel/framework/pull/48633
/>
* [10.x] Dispatch 'connection failed' event in async http client request by @gdebrauwer in
https://github.com/laravel/framework/pull/48900
/>
* authenticate method refactored to use null coalescing operator by @miladev95 in
https://github.com/laravel/framework/pull/48917
/>
* [10.x] Add support for Sec-Purpose header by @nanos in
https://github.com/laravel/framework/pull/48925
/>
* [10.x] Allow setting retain_visibility config option on Flysystem filesystems by @jnoordsij in
https://github.com/laravel/framework/pull/48935
/>
* [10.x] Escape forward slashes when exploding wildcard rules by @matt-farrugia in
https://github.com/laravel/framework/pull/48936
/>
The post Laravel 10.31 Released appeared first on Laravel News.
Join the Laravel Newsletter to get Laravel articles like this directly in your inbox.