News

Laravel 5.8.12 Released

Published
Laravel 5.8.12 Released image

Release updates

Never miss a Laravel release

Get an email whenever a new Laravel release lands.

The Laravel team released the 400th release of Laravel (v5.8.12) yesterday with a new duplicates() collection method and other new features, fixes, and changes to the framework.

First, a new duplicates() method was added to the Illuminate\Support\Collection class:

collect([1,2,1,1,1])->duplicates();
=> Illuminate\Support\Collection {#2938
all: [
2 => 1,
3 => 1,
4 => 1,
],
}

It works by returning the indexes of the duplicate values from the original collection object:

$item[0] = 1 is not a duplicate
$item[1] = 2 is not a duplicate
$item[2] = 1 is a duplicate
$item[3] = 1 is a duplicate
$item[4] = 1 is a duplicate

Similarly, a new duplicates() method was added to the Eloquent collection class, using the $model->is($another) to check for duplicates. Here’s an example from PR #28194:

use App\User;
 
$one = User::find(1);
$two = User::find(1);
$three = User::find(1);
 
$users = (new User)->newCollection([$one, $two, $three]);
 
=> Illuminate\Database\Eloquent\Collection {#2936
all: [
1 => App\User {#2929
id: "1",
name: "Admin",
email: "admin@example.com",
email_verified_at: null,
created_at: "2019-04-16 23:33:30",
updated_at: "2019-04-16 23:33:30",
},
2 => App\User {#2927
id: "1",
name: "Admin",
email: "admin@example.com",
email_verified_at: null,
created_at: "2019-04-16 23:33:30",
updated_at: "2019-04-16 23:33:30",
},
],
}

Next, a new getViews() method was added to the FileViewFinder class, which allows you to retrieve all the view information from currently loaded views. Nothing is new here except the ability to access the $views property via the getViews() method.

As of Laravel 5.8.11 the exit code is captured in scheduled command events, which lead to a new PR providing some helpers available to the scheduler:

$schedule->command('my:command')
->onSuccess(function () {
// do something when scheduled command ran successfully
})
->onFailure(function () {
// do something when scheduled command failed
})
->pingOnSuccess('https://example.com')
->pingOnFailure('https://example.com')
->emailOnFailure('johndoe@example.com')
;

The emailOnFailure() method is useful when you only want to receive an email for failed scheduled commands as opposed to the emailOutputTo method which is sent no matter what the outcome of the scheduled task. The new scheduler methods have already been added to the scheduling documentation.

Next, the SET datatype was added to the MySQL grammar (learn more about The SET Type):

Schema::create('table_name', function (Blueprint $table) {
$table->bigIncrements('id');
$table->set("field_name", [ "Possible", "Values" ]);
$table->timestamps();
});

The last new feature in this release is the addition of the in and not in operators, which can be passed as strings to the query builder:

// these two calls produce the same query
$query->where('foo', 'in', [1, 2]);
$query->whereIn('foo', [1, 2]);
 
// these two calls produce the same query
$query->where('foo', 'not in', [1, 2]);
$query->whereNotIn('foo', [1, 2]);

You can see the full list of fixes below, and the whole diff between 5.8.11 and 5.8.12 on GitHub. The full release notes for Laravel 5.8 are available in the GitHub 5.8 changelog:

v5.8.12

Added

  • Added Illuminate\Support\Collection::duplicates() (#28181)
  • Added Illuminate\Database\Eloquent\Collection::duplicates() (#28194)
  • Added Illuminate\View\FileViewFinder::getViews() (#28198)
  • Added helper methods onSuccess() \ onFailure() \ pingOnSuccess() \ pingOnFailure() \ emailOnFailure() to Illuminate\Console\Scheduling\Event (#28167)
  • Added SET datatype on MySQL Grammar (#28171)
  • Added possibility for use in / not in operators in the query builder (#28192)

Fixed

  • Fixed memory leak in JOIN queries (#28220)
  • Fixed circular dependency in Support\Testing\Fakes\QueueFake for undefined methods (#28164)
  • Fixed exception in lt \ lte \ gt \ gte validations with different types (#28174)
  • Fixed string quoting for SQL Server (#28176)
  • Fixed whereDay and whereMonth when passing int values (#28185)

Changed

  • Added autocomplete attributes to the html stubs (#28226)
  • Improved event:list command (#28177, cde1c5d)
  • Updated Illuminate\Database\Console\Factories\FactoryMakeCommand to generate more IDE friendly code (#28188)
  • Added missing LockProvider interface on DynamoDbStore (#28203)
  • Change session’s user_id to unsigned big integer in the stub (#28206)
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 →
Laravel Auditor Audits Your App With Your Own AI Agent image

Laravel Auditor Audits Your App With Your Own AI Agent

Read article
A simple form builder that stays out of your way image

A simple form builder that stays out of your way

Read article
Laravel AI: Trace Agent Runs With Lifecycle Events image

Laravel AI: Trace Agent Runs With Lifecycle Events

Read article
Laravel AI: Get Raw HTTP Responses and Rate Limits image

Laravel AI: Get Raw HTTP Responses and Rate Limits

Read article
Agent Run Observability in Laravel AI SDK 0.11 image

Agent Run Observability in Laravel AI SDK 0.11

Read article
Debounced Queued Event Listeners in Laravel image

Debounced Queued Event Listeners in Laravel

Read article