Back to Blog

Laravel 9.46 Released

Julian Beaujardin
Julian Beaujardin Reference: Laravel News January 5th, 2023

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 - 2023-01-03

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)