Laravel 8.79 Released
Published on by Paul Redmond
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; // Afterreturn (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 and whenContainsAll to Stringable ( #40285 )
- Support action_level configuration in LogManager ( #40305 )
- Added whenEndsWith(), whenExactly(), whenStartsWith(), etc to Stringable ( #40320 )
- Makes it easy to add additional options to PendingBatch ( #40333 )
- Added method to MigrationsStarted/MigrationEnded events ( #40334 )
Fixed
- Fixed failover mailer when used with Mailgun & SES mailers ( #40254 )
- Fixed digits_between with fractions ( #40278 )
- Fixed cursor pagination with HasManyThrough ( #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 )