Back to Blog

Laravel 8.79 Released

Julian Beaujardin
Julian Beaujardin Reference: Laravel News January 13th, 2022

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 and whenContainsAll 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)