
Passionate about building cool things, sharing ideas, and contributing to open-source.
I'm a proud Laravel contributor, as most of my work is in PHP (Laravel), but I enjoy getting stuck into any codebase.

Passionate about building cool things, sharing ideas, and contributing to open-source.
I'm a proud Laravel contributor, as most of my work is in PHP (Laravel), but I enjoy getting stuck into any codebase.
I’m fairly sure by this point Taylor Otwell is more than likely fed up with seeing my face, but it was him that said “we must ship!” I’m continuing to commit and push PR’s so– this week covers Laravel v12.49.0 - and as usual there’s some funky additions! This blog post is mainly to go over my additions, as well - I’m not Laravel News! Queue assertPushedTimes Currently, when you want to assert a Job that’s been pushed to the queue a certain amount of times, we do something like: ...
With the release of Laravel v12.45.0 it’s all about enums! Loads of methods now accept enums! A lot of methods now accept enums, which I think is pretty cool. I did however have a helping hand, so I’m a bit biased Persistent Cache Cache Facade Queue Paused / Resumed Events The below all have methods that now accept enums, or all of their methods do! This means we can easily change the enum value without having to slug through tests etc. ...
2025 is almost over, so, it’s time to look back! New role At pretty much the start of 2025 (very late 2024) I started a new role at Fusions PIM, after wanting to focus on code quality and understanding, rather than having to code against a timer and trying to push things out as fast as possible. While at first I was unsure if it was the right move looking back now I’ve learnt a lot. Perhaps not in the literal sense, but more focusing on quality, and thinking… making sure the PR’s I make, and the reviews I leave offer value. ...
⚠️ Note: This feature is only available in Laravel v12.41.1 and above. If you’re running an earlier version, you’ll need to upgrade before being able to apply these changes. I recently discovered our Workers seemed to be hitting the database far too frequently. After digging into the Worker class, I figured out that it was down to the restart and pause polling that happens on each loop. I knew we could override the CacheManager class to change this behavior, but that felt… funky. It wasn’t obvious to developers, and it wasn’t really documented anywhere. So — I thought I’d open a PR, and luckily for me, it was accepted! 🎉 ...
When going through the Laravel Queue documentation, I noticed a section around Queued Relationships and the d-low is that essentially when you’re sending a model to a Job, if your model has relationships loaded, those relationships will also get loaded into the payload of the job. This isn’t always obvious! For example, take the below Job as an example: use App\Models\User; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; class WelcomeEmailJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public function __construct(public User $user) { } public function handle() { // Some sending logic here... } } Because we’re expecting a User model its seralized, including the relations. ...