News

Laravel 8.69 Released

Published
Laravel 8.69 Released image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

The Laravel team released 8.69 with enum model casts, an enum validation rule, mask() method for Str and Stringable, and the latest changes in the v8.x branch.

Enum Model Casts

Mohamed Said contributed the ability for models to be cast to/from an Enum starting in PHP 8.1.

Here's an example from the pull request tests:

 
enum StringStatus: string
{
case pending = 'pending';
case done = 'done';
}
 
enum IntegerStatus: int
{
case pending = 1;
case done = 2;
}
 
// Model
class EloquentModelEnumCastingTestModel extends Model
{
public $timestamps = false;
protected $guarded = [];
protected $table = 'enum_casts';
 
public $casts = [
'string_status' => StringStatus::class,
'integer_status' => IntegerStatus::class,
];
}

Then you can compare the model to the Enum value in your code, for example:

if ($server->status == ServerStatus::provisioned){
// ...
}

Enum Validation Rule

Mohamed Said contributed an enum validation rule that ensures the data has a corresponding value in the Enum:

validator(
['status' => 'pending'],
['status' => [new Enum(ServerStatus::class)]]
)->validate();

Use a Callback in During an Auth Attempt

@Italo contributed the ability to use a callback in the credentials array of an Auth::attempt() call:

Auth::attempt([
'email' => 'john@doe.com',
function ($builder) {
$builder->where('subscription_expires_at', '<', now());
}
]);

Mask Support for Str and Stringable

@Italo contributed a mask() method that masks a portion of a string with a repeated character:

Str::mask('my-private@email.com', '*', 3);
// my******************
 
Str::mask('+56 9 87654321', '*', -8, 6);
// + 56 9 ******21

Custom Stringable Cast

Louis-Gabriel contributed a custom AsStringable cast that casts a string into a Stringable instance:

// Illuminate\Support\Stringable instance
$model->title->kebab();

Check out Pull Request #39410 for implementation details.

Skip Locked Support for MariaDB

Dries Vints contributed SKIP LOCKED support to the MariaDB (MySQL) engine. This update provides support for skipping locked rows when fetching records from the database.

Check out Pull Request #39396 for implantation details.

Success and Failure Command Assertions

Roberto Aguilar contributed a few convenience assertions for command exit codes within tests:

// Before
$this->artisan(FooCommand::class)->assertExitCode(0);
$this->artisan(FooCommand::class)->assertExitCode(1);
 
// Using optional convenience methods
$this->artisan(FooCommand::class)->assertSuccessful();
// Assert exit code !== success (0)
$this->artisan(FooCommand::class)->assertFailed();

Release Notes

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

v8.69.0

Added

  • Improve content negotiation for exception handling (#39385)
  • Added support for SKIP LOCKED to MariaDB (#39396)
  • Custom cast string into Stringable (#39410)
  • Added Illuminate/Support/Str::mask() (#39393)
  • Allow model attributes to be casted to/from an Enum (#39315)
  • Added an Enum validation rule (#39437)
  • Auth: Allows to use a callback in credentials array (#39420)
  • Added success and failure command assertions (#39435)

Fixed

  • Fixed CURRENT_TIMESTAMP as default when changing column (#39377)
  • Make accept header comparison case-insensitive (#39413)
  • Fixed regression with capitalizing translation params (#39424)

Changed

  • Added bound check to env resolving in Illuminate/Foundation/Application::runningUnitTests() (#39434)
Paul Redmond photo

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

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article