Laravel 8.79 Released
The Laravel team released 8.79 with a full-text search for MySQL and PostgreSQL, new Stringable methods, and the latest changes in the v8.x branch.
Paginator onLastPage() Method
Johan van Helden contributed a onLastPage()
method to the Paginator which helps clarify logic around the last page:
@if ($paginator->onFirstPage())
{{-- ... --}}
@endif
{{-- Before --}}
@if (!$paginator->hasMorePages())
{{-- ... --}}
@endif
{{-- After --}}
@if ($paginator->onLastPage())
{{-- ... --}}
@endif
Allow Method Typed Variadic Dependencies
Léo Colombaro contributed the ability to use variadic for dependency injection when calling a callable. Here's an example from the pull request:
$app->bind(Filter::class, function ($app) {
return [
$app->make(NullFilter::class),
$app->make(ProfanityFilter::class),
$app->make(TooLongFilter::class),
];
});
$app->call(function (Logger $logger, Filter ...$filters) {
// ...
});
Implement Full-Text Search for MySQL and PostgreSQL
Dries Vints contributed natural language full-text search for MySQL and PostgreSQL. Here's some examples taken from Pull Request #40129:
Schema::create('articles', function (Blueprint $table) {
$table->id('id');
$table->string('title', 200);
$table->text('body');
$table->fulltext(['title', 'body']);
});
// Search for "databases" in the title and body fulltext index...
$articles = DB::table('articles')
->whereFulltext(['title', 'body'], 'database')
->get();
// Search for "databases" in the title and body fulltext index with boolean mode...
$articles = DB::table('articles')
->whereFulltext(['title', 'body'], 'database', ['mode' => 'boolean'])
->get();
// Search for "databases" in the title and body fulltext index with an expanded query...
$articles = DB::table('articles')
->whereFulltext(['title', 'body'], 'database', ['expanded' => true])
->get();
New Stringable Methods
Travis Elkins contributed two Stringable methods, whenContains()
and whenContainsAll()
:
// Before
$stringable = Str::of('some important announcement');
if ($stringable->contains(['important', 'emergency'])) {
$stringable->upper();
}
return (string) $stringable;
// After
return (string) Str::of('some important announcement')
->whenContains(
['important', 'emergency'],
fn (Stringable $stringable) => $stringable->upper(),
);
}
The whenContainsAll()
method would work the same way. However, the string must contain all expected matches to make the condition true
that triggers the closure call.
Travis Elkins also contributed other Stringable methods in Pull Request #40320:
- endsWith()
- exactly()
- is()
- isAscii()
- isUuid()
- test()
- startsWith()
Release Notes
You can see the complete list of new features and updates below and the diff between 8.78.0 and 8.79.0 on GitHub. The following release notes are directly from the v8.79.0 release notes:
v8.79.0
Added
- Added
onLastPage
method to the Paginator (#40265) - Allow method typed variadics dependencies (#40255)
- Added
ably/ably-php
to composer.json to suggest (#40277) - Implement Full-Text Search for MySQL & PostgreSQL (#40129)
- Added
whenContains
andwhenContainsAll
to Stringable (#40285) - Support action_level configuration in LogManager (#40305)
- Added
whenEndsWith()
,whenExactly()
,whenStartsWith()
, etc to Stringable (#40333) - Added method to
MigrationsStarted/MigrationEnded
events (#40334)
Changed
- Automatically add event description when scheduling a command (#40286)
- Update the Pluralizer Inflector instanciator (#40336)
Fixed
- Fixed failover mailer when used with Mailgun & SES mailers (#40254)
- Fixed digits_between with fractions (#40278)
- Fixed digits_between with fractions (#40300)
- Fixed virtual attributes (29a6692)
- Fixed timezone option in schedule:list command (#40304)
- Fixed Doctrine type mappings creating too many connections (#40303)
- Fixed of resolving Blueprint class out of the container (#40307)
- Handle type mismatch in the enum validation rule (#40362)