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 MigrationSkipped migration event in #58167
  • Add previous locale to LocaleUpdated event 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 JobAttempted even for sync jobs in #58228
  • Allow BackedEnum for session keys in #58241
  • Allow BackedEnum for cache keys in #58246
  • Add CommandFailed event for Redis in #58251
  • Add havingBetween variants 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:

// before
redirect()->route('post.show', $post->id);
$response->assertRedirect(route('post.show', $post->id));
 
// after
to_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.