New Merge and Replace Collection Methods in Laravel 5.8.28

The Laravel team released v5.8.28 yesterday with new collection methods for merge and replacement, and the Tappable trait on TestResponse .

Before we get to the new collection methods, the TestResponse class is now tappable, which provides a different way of making assertions on the test response:

// With tap $this->getJson('/api/users/index') ->assertStatus(200) ->tap(function (TestResponse $response) { $this->assertMatchesJsonSnapshot($response); }); // Without tap $response = $this->getJson('/api/users/index') ->assertStatus(200); $this->assertMatchesJsonSnapshot($response);

Next, a few new collection methods were added, including mergeRecursive() , replace() , and replaceRecursive() .

The mergeRecursive() method implements the basic PHP array_merge_recursive behavior on a collection.

Next, the replace() and replaceRecursive() methods, which implements the basic array_replace and array_replace_recursive on collections respectively. Here’s an example from the test cases which might illustrate how these methods work:

$c = new Collection(['a', 'b', 'c']); $this->assertEquals( ['a', 'd', 'e'], $c->replace([1 => 'd', 2 => 'e'])->all() );

Last, a new session only() method was added to specify and only retrieve certain session keys:

$session->only(['example1', 'example2']);

You can see the whole diff between 5.8.27 and 5.8.28 on GitHub. The full release notes for Laravel 5.8 are available in the GitHub 5.8 changelog :

v5.8.28

Added

Make TestResponse tappable (#29033)

Added Support\Collection::mergeRecursive() method (#29084)

method (#29084) Added Support\Collection::replace() and Support\Collection::replaceRecursive() methods (#29088)

and methods (#29088) Added Session\Store::only() method (#29107)

Fixed

Fixed cache repository setMultiple with an iterator (#29039)

Fixed cache repository getMultiple implementation (#29047)

Reverted

Changed

Fail job immediately after it timeouts if it won’t be retried (#29024)