News

Laravel 10.4 Released

Published
Laravel 10.4 Released image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

The Laravel team released 10.4 with a File::json() method, converting existing HasMany relationships to a HasOne relationship, a new test response assertion, and more.

File::json() method

Austin White contributed a File::json() method as a convenience for getting JSON encoded data from a file:

// Before
$contents = File::get('sample.json');
$data = json_decode($contents, true);
 
// After
$data = File::json('sample.json');

Assert unsupported media type

Shamimul Alam contributed an assertion helper for the 415 Unsupported Media Type response status code:

$response->assertUnsupportedMediaType();

Convert an existing HasMany to HasOne relationship

Luke Kuzmish contributed converting a HasMany to a HasOne and a MorphMany to MorphOne

Take this example of having to define two relationships:

class User extends Model
{
public function logins(): HasMany {
return $this->hasMany(Login::class, 'some_id', 'the_other_id');
}
public function latestLogin(): HasOne {
return $this->hasOne(Login::class, 'some_id', 'the_other_id')->latestOfMany();
}
}

With this PR now, you can do the following instead with the ->one() method:

class User extends Model
{
public function logins(): HasMany {
return $this->hasMany(Login::class, 'some_id', 'the_other_id');
}
public function latestLogin(): HasOne {
return $this->logins()->one()->latestOfMany();
}
}

The one() method is available on the HasMany, HasManyThrough, and MorphMany.

Create macroable method for paginationInformation

Frans Slabbekoorn contributed the ability to define a macro for paginationInformation that allows customizing pagination information without having to extend all resources as a base resource:

/** @mixin \Illuminate\Http\Resources\Json\ResourceCollection */
class ResourceCollectionMixin
{
public function paginationInformation(): Closure
{
return fn ($request, $paginated, $default) => collect($default)->mapWithKeysRecursively(fn ($item, $key) => [Str::camel($key) => $item])->toArray();
}
}

Release Notes

You can see the complete list of new features and updates below and the diff between 10.3.0 and 10.4.0 on GitHub. The following release notes are directly from the changelog:

v10.4.0

Added

  • Added Illuminate/Testing/Concerns/AssertsStatusCodes::assertUnsupportedMediaType() (#46426)
  • Added curl_error_code: 77 to DetectsLostConnections (#46429)
  • Allow for converting a HasMany to HasOne && MorphMany to MorphOne (#46443)
  • Add option to create macroable method for paginationInformation (#46461)
  • Added Illuminate/Filesystem/Filesystem::json() (#46481)

Fixed

  • Fix parsed input arguments for command events using dispatcher rerouting (#46442)
  • Fix enums uses with optional implicit parameters (#46483)
  • Fix deprecations for embedded images in symfony mailer (#46488)

Changed

  • Added alternative database port in Postgres DSN (#46403)
  • Allow calling getControllerClass on closure-based routes (#46411)
  • Remove obsolete method_exists(ReflectionClass::class, 'isEnum') call (#46445)
  • Convert eloquent builder to base builder in whereExists (#46460)
  • Refactor shared static methodExcludedByOptions method to trait (#46498)
Paul Redmond photo

Staff writer at Laravel News. Full stack web developer and author.

Sponsored

acquaintsoft logo
Acquaint Softtech

Hire Laravel developers with AI expertise at $20/hr. Get started in 48 hours.

Visit Acquaint Softtech

The latest

View all →
Running Laravel's Scheduler on Multiple Servers image

Running Laravel's Scheduler on Multiple Servers

Read article
Laravel Fake Assertions Now Accept Property Arrays image

Laravel Fake Assertions Now Accept Property Arrays

Read article
Route::query() and Model defaults() in Laravel 13.35 image

Route::query() and Model defaults() in Laravel 13.35

Read article
Laravel AI SDK 1.1 Adds Agent Skills and Cohere Chat image

Laravel AI SDK 1.1 Adds Agent Skills and Cohere Chat

Read article
VMPal: Give Your AI Agent a Whole Computer image

VMPal: Give Your AI Agent a Whole Computer

Read article
Synapse: A Dev Dashboard for Laravel AI SDK Agents image

Synapse: A Dev Dashboard for Laravel AI SDK Agents

Read article