Laravel 8.82 Released
Published on by Paul Redmond
The Laravel team released 8.82 with factory matrix sequences, a transliterate string helper, a new validation rule, and more:
Cross Join Sequences in Factories
@thomasowow contributed a new method and class that helps join multiple factory sequences.
Here's the newly merged approach for joining multiple sequences:
User::factory(4) ->state( new MatrixSequence( [['first_name' => 'Thomas'], ['first_name' => 'Agent']], [['last_name' => 'Anderson'], ['last_name' => 'Smith']], ), ) ->create(); /* Results in:[ ['first_name' => 'Thomas', 'last_name' => 'Anderson'], ['first_name' => 'Thomas', 'last_name' => 'Smith'], ['first_name' => 'Agent', 'last_name' => 'Anderson'], ['first_name' => 'Agent', 'last_name' => 'Smith'],]*/
Previously, you'd call sequence
multiple times:
User::factory(4) ->sequence([ ['first_name' => 'Thomas'], ['first_name' => 'Thomas'], ['first_name' => 'Agent'], ['first_name' => 'Agent'] ]) ->sequence([ ['last_name' => 'Anderson'], ['last_name' => 'Smith'], ['last_name' => 'Anderson'], ['last_name' => 'Smith'], ]);
Check out Pull Request #40542 for more examples and implementation details. You can learn more about sequences in the Database Testing documentation.
Transliterate String Helper
Liam Hackett contributed a Str::transliterate()
method which transliterates a string to its closes ASCII representation:
$value = 'ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ';$this->assertSame( 'abcdefghijklmnopqrstuvwxyz', Str::transliterate($value));
If you're interested in what prompted this addition, read the discussion on Pull Request #40681.
Required Array Keys Validation Rule
Andrew Arscott contributed a required_array_keys
validation rule which allows you to define keys that are required in an array input:
$data = [ 'baz' => [ 'foo' => 'bar', 'fee' => 'faa', 'laa' => 'lee', ],]; $rules = [ 'baz' => [ 'array', 'required_array_keys:foo,fee', ],]; $validator = new Validator($trans, $data, $rules, [], []);$validator->passes(); // true
Here's a failed validation attempt:
$data = [ 'baz' => [ 'foo' => 'bar', 'fee' => 'faa', 'laa' => 'lee', ],]; $rules = [ 'baz' => [ 'array', 'required_array_keys:foo,fee,boo,bar', ],]; $validator = new Validator($trans, $data, $rules, [], []); $validator->passes(); // false // 'The baz field must contain entries for foo, fee, boo, bar'$validator->messages()->first('baz');
Release Notes
You can see the complete list of new features and updates below and the diff between 8.81.0 and 8.82.0 on GitHub. The following release notes are directly from the changelog:
v8.82.0
Added
- Added class and method to create cross joined sequences for factories (#40542)
- Added Transliterate shortcut to the Str helper (#40681)
- Added array_keys validation rule (#40720)
Fixed
- Prevent job serialization error in Queue (#40625)
- Fixed autoresolving model name from factory (#40616)
- Fixed : strtotime Epoch doesn't fit in PHP int (#40690)
- Fixed Stringable ucsplit (#40694, #40699)