Laravel 12.45, weekly updates, and weekly tip
Laravel 12.45
The first release in 2026 brings us to Laravel 12.45.0. There was a minor release during the holidays (12.44.0). So, here are the highlights from both:
- New
MigrationSkippedmigration event in #58167 - Add previous locale to
LocaleUpdatedevent in #58179 - Introduce JSON:API resource in #57571
- Add queue paused/resumed events in #58202
- Add method to add attachment from cloud storage in #58201
- Fire
JobAttemptedeven for sync jobs in #58228 - Allow
BackedEnumfor session keys in #58241 - Allow
BackedEnumfor cache keys in #58246 - Add
CommandFailedevent for Redis in #58251 - Add
havingBetweenvariants to Query Builder in #58259 - Support "where subquery between values" in #58290
You may review the full branch diff on GitHub for a complete list of changes.
Weekly Journal
Happy New Year! I took the holidays off. This was the first year my oldest daughter had a Winter Break. So she was home from school for two weeks. Also, it's good to refresh before starting a new year.
And it worked, as I'm excited to get back into the code. I got a jump start on things January 1. I sent out the first Monthly Shift to Shifty Plan subscribers. These contain a curated set of refactors to keep your Laravel app modern (details below).
I also continued work on Can I Upgrade Laravel. For the last few years I've been meaning to improve its UX, but also its feature set. Specifically, to get notified when you're app becomes compatible with the latest version. So, ideally I'll finish that before the next Laravel release (next month, maybe).
Otherwise, I'm finishing up the Human Shifts which came in at the end of 2025. I'll also livestream building a new Shift tomorrow.
Weekly Tip
The Monthly Shift for January refactored to use to_route, to_action, assertRedirectToRoute, and assertRedirectToAction. While these have been around for a few versions, they have become more prevalent in the documentation and first-party code.
I myself have adopted them on new projects. I like how they streamline an otherwise long redirect chain. They also are more human readable - "return to route", instead of "return redirect route".
Anyway, code speaks louder than words. So here's the before and after:
// beforeredirect()->route('post.show', $post->id);$response->assertRedirect(route('post.show', $post->id)); // afterto_route('post.show', $post->id);$response->assertRedirectToRoute('post.show', $post->id);
While this refactor was made in an automated PR for Shifty Plan subscribers, you may run it yourself (for free) using the Shift Workbench.
I'll try to keep the practice of making the automation in these Monthly Shifts available as a task in the Shift Workbench. But it may not always be a free task.