News

Laravel 9.46 Released

Published
Laravel 9.46 Released image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

The Laravel team released 9.46 this week with two JsonResource methods to conditionally include resource properties, updates to the decimal validation rule, and more:

Add "whenHas" to the JSONResource

Michael Nabil contributed a whenHas() method to the JsonResource, which gives you the ability to conditionally include attributes in a Response when an attribute is found on a model.

For example, this provides a clean way to define an attribute conditionally:

public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->whenHas('email'),
];
}

You can also define a Closure as the default:

public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->whenHas('email', function () {
return 'default value';
}),
];
}

See Pull Request #45376 for more details.

JsonResource "unless" method

Michael Nabil contributed an unless() method for retrieving a value if the condition resolves to false:

public function toArray($request)
{
$someCondition = false;
 
return [
'id' => $this->id,
'name' => $this->name,
// Email will be included, with `true` will not.
'email' => $this->unless($someCondition, 'email'),
];
}

Decimal validation rule supports signed numbers

@Pusparaj contributed an update to the decimal validation rule that supports signed number (i.e., -5.5, +1.5, etc.):

$v = new Validator(
$trans,
['foo' => '-1.234'],
['foo' => 'Decimal:2,3']
);
 
$this->assertTrue($v->passes());

Artisan serve now passes the PATH variable

Maarten Buis contributed passing of the PATH environment variable through with php artisan serve, which might be necessary to the underlying code to use to find executables. You can find more details about in Pull Request #45402.

Release Notes

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

v9.46.0

Added

  • Added Passthrough PATH variable to serve command (#45402)
  • Added whenHas to JsonResource (#45376)
  • Added ./fleet directory to .gitignore (#45432)
  • Added unless to JsonResource (#45419)

Fixed

  • Fixed credentials check (#45437)
  • Fixed decimal cast precision issue (#45456, #45492)
  • Precognitive validation with nested arrays doesn't throw validation error (#45405)
  • Fixed issue on which class to check increment and decrement methods for custom cast (#45444)

Changed

  • Update decimal validation rule to allow validation of signed numbers (24a48b2)
  • Output only unique asset / preload tags in Vite (#45404)
  • Optimize whereKey method in Query Builder (#45453)
  • Remove extra code in Model.php to optimize performance (#45476)
  • Exception Handler prepareResponse add previous Exception (#45499)
Paul Redmond photo

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

Sponsored

serpapi logo
SerpApi

The Web Search API for Your LLM and AI Applications

Visit SerpApi

The latest

View all →
Elastic Bridge: Eloquent-Style Queries for Elasticsearch and OpenSearch image

Elastic Bridge: Eloquent-Style Queries for Elasticsearch and OpenSearch

Read article
Unlearn.dev goes free for a weekend, October 10 and 11 image

Unlearn.dev goes free for a weekend, October 10 and 11

Read article
Tashil: Laravel Subscription Plans and Feature Usage Limits image

Tashil: Laravel Subscription Plans and Feature Usage Limits

Read article
Decide with Jev: Laravel AI That Answers with a Probability image

Decide with Jev: Laravel AI That Answers with a Probability

Read article
JetBrains Air: Run AI Coding Agents in JetBrains IDEs image

JetBrains Air: Run AI Coding Agents in JetBrains IDEs

Read article
Memoize Tagged Cache Reads in Laravel image

Memoize Tagged Cache Reads in Laravel

Read article