Laravel 8.79 Released

News

January 13th, 2022

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:

1@if ($paginator->onFirstPage())
2 {{-- ... --}}
3@endif
4 
5{{-- Before --}}
6@if (!$paginator->hasMorePages())
7 {{-- ... --}}
8@endif
9 
10{{-- After --}}
11@if ($paginator->onLastPage())
12 {{-- ... --}}
13@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:

1$app->bind(Filter::class, function ($app) {
2 return [
3 $app->make(NullFilter::class),
4 $app->make(ProfanityFilter::class),
5 $app->make(TooLongFilter::class),
6 ];
7});
8 
9$app->call(function (Logger $logger, Filter ...$filters) {
10 // ...
11});

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:

1Schema::create('articles', function (Blueprint $table) {
2 $table->id('id');
3 $table->string('title', 200);
4 $table->text('body');
5 $table->fulltext(['title', 'body']);
6});
7 
8// Search for "databases" in the title and body fulltext index...
9$articles = DB::table('articles')
10 ->whereFulltext(['title', 'body'], 'database')
11 ->get();
12 
13// Search for "databases" in the title and body fulltext index with boolean mode...
14$articles = DB::table('articles')
15 ->whereFulltext(['title', 'body'], 'database', ['mode' => 'boolean'])
16 ->get();
17 
18// Search for "databases" in the title and body fulltext index with an expanded query...
19$articles = DB::table('articles')
20 ->whereFulltext(['title', 'body'], 'database', ['expanded' => true])
21 ->get();

New Stringable Methods

Travis Elkins contributed two Stringable methods, whenContains() and whenContainsAll():

1// Before
2$stringable = Str::of('some important announcement');
3 
4if ($stringable->contains(['important', 'emergency'])) {
5 $stringable->upper();
6}
7 
8return (string) $stringable;
9 
10// After
11return (string) Str::of('some important announcement')
12 ->whenContains(
13 ['important', 'emergency'],
14 fn (Stringable $stringable) => $stringable->upper(),
15 );
16}

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 )

Changed

  • Automatically add event description when scheduling a command ( #40286 )
  • Update the Pluralizer Inflector instanciator ( #40336 )

Filed in:

Paul Redmond

Full stack web developer. Author of Lumen Programming Guide and Docker for PHP Developers.