Laravel 11.19, weekly updates, and 🔥 tip
Laravel 11.19
There was another release last week reverting a few things and one today bringing us to Laravel 11.19. Here are some highlights from both Laravel 11.18 and 11.19.
- Apply relation constraints on
upsert
in #52239 - Add
whereNone
to the query builder in #52260 - Add
assertSeeHtml
,assertDontSeeHtml
, andassertSeeHtmlInOrder
in #52285 - Add
assertExactJsonStructure
in #52311 - Add
withoutHeader
toMakesHttpRequests
in #52309 - Add
completeWords
flag toStr::limit
in #52245
You may review the full branch diff on GitHub for a complete list of changes.
This version bump and update is automated for subscribers to a Shifty Plan. If you don't have one of those, be sure to bump your constraint and run composer update
to get the latest features.
Weekly Journal
Last week I live streamed working on a new feature for Shift. I soft-launched it Friday. I still need to write-up a deep dive for the Shift Blog. Hopefully I'll have time to do that later this week.
With the rest of the week I met with potential pairs for a new side-project. In between those, I polished a few rough edges on wppm.io.
Over the weekend I updated a few of the Shift Videos. However, I aquired a bit of a cold. So I'm taking a few days off since I sound hoarse. I'll see how it feels in tomorrow's live stream - where I embark on a crusade to improve Mockery's error messages.
🔥 Tip
In the process of working on the new Shift feature, I found another case where I preferred native PHP array functions (and operators) over collection methods.
Let's consider the following structure:
[[1 => 'a'], [3 => 'c'], [2 => 'b']]
I want it to be:
[1 => 'a', 3 => 'c', 2 => 'b']
In my mind, I was thinking flatten
or condense
. However, those don't work since they don't preserve the keys. This means mapWithKeys
works:
$items->mapWithKeys(fn ($item) => [key($item) => current($item)]);
But the use of key
/current
felt complex to my eye. There had to be a better way. Maybe there is or maybe there's one waiting to be born.
I don't know it, so I proposed this to some big brains and stumbled upon:
array_replace(...$items);
Now this is complex. But I find it easier read - spread out the individual subarrays and pass them to array_replace
.
Let's break it down, first spreading them out:
array_replace([1 => 'a'], [3 => 'c'], [2 => 'b']);
This is obviously less complex. Now we just need to know what array_replace
does - it replace items in the first array with items from the other arrays.
Since all my keys are unique, it, effectively, flattens with keys. The result is a single array I want:
[1 => 'a', 3 => 'c', 2 => 'b']