Are you like me and find it impossible to find the time to keep up with the changes in Laravel on a weekly basis? In this series I'll try to roll them up periodically into one post.
I'm only going to include features and not patches or fixes, for a full list visit the Laravel release log.
Eloquent
updateOrFail
uses saveOrFail
to update or throw an exception instead of just returning a bool. - PR
1$user->update(); // return bool2 3try {4 $user->updateOrFail();5} catch (Exception $e) {6 // Exception thrown7}
deleteOrFail
makes it more convenient to handle delete errors in destroy actions, as it is less verbose than checking the return value of delete(). - PR
1$user->delete(); // return bool2 3try {4 $user->deleteOrFail();5} catch (Exception $e) {6 // Exception thrown7}
valueOrFail()
method, which gets a single column's value from the first result of a query or throws an exception: - PR
1// Before:2$votes = User::where('name', 'John')->firstOrFail('votes')->votes;3 4// Now:5$votes = User::where('name', 'John')->valueOrFail('votes');
whereMorphedTo
and orWhereMorphedTo
are a shortcut for adding a where condition looking for models that are morphed to a specific related model, without the overhead of a whereHas subquery.- PR
1$feedback = Feedback::query()2 ->where('subject_type', $model->getMorphClass())3 ->where('subject_id', $model->getKey())4 ->get();5 6// turns into7$feedback = Feedback::whereMorphedTo('subject', $model)->get();
whereBelongsTo()
Eloquent builder method: - PR
Added 1$query->where('author_id', $author->id)2 3// turns into4$query->whereBelongsTo($author)
Validation
prohibits
: Allows you to prohibit a field from being passed if another is also passed. - PR
1Validator::validate([4], [5 'email' => 'prohibits:emails'6]);
merge()
method to merge items to validated inputs: - PR
1$validator = Validator::make(['name' => 'Taylor'], ['name' => 'required']);2 3$validator->safe()->merge(['role' => 'Admin']);4 5User::create($validator->safe()->all());
PR
Multiple Date Formats -1public function rules()2{3 return [4 'date' => 'date_format:Y-m-d,m-d',5 ];6}
Requests
Docs
Using the collect method, you may retrieve all of the incoming request's input data as a collection: -1$input = $request->collect();
Blade
Docs
Anonymous Index Blade Component Templates -Caleb Porzio contributed the ability to use index.blade.php for the default view for an anonymous component pointing to a folder:
1{{-- components/accordion/index.blade.php --}}2<x-accordion>3 {{-- components/accordion/item.blade.php --}}4 <x-accordion.item>5 {{-- ... --}}6 </x-accordion.item>7</x-accordion>
Docs
The @aware Blade Directive -The new @aware
directive allows child components to easily access parent component data when needed:
1<!-- Example usage --> 2<x-menu color="purple"> 3 <x-menu.item>...</x-menu.item> 4 <x-menu.item>...</x-menu.item> 5</x-menu> 6 7<!-- 8Implementation 9/resources/views/components/menu/index.blade.php10-->11 12@aware(['color' => 'gray'])13 14<li {{ $attributes->merge(['class' => 'text-'.$color.'-800']) }}>15 {{ $slot }}16</li>
Events
PR
Maintenance Mode Events -1use Illuminate\Foundation\Events\MaintenanceModeEnabled;2use Illuminate\Foundation\Events\MaintenanceModeDisabled;3 4Event::dispatch(MaintenanceModeEnabled::class);5Event::dispatch(MaintenanceModeDisabled::class);
Testing
assertNotSoftDeleted
which asserts that a given record has not been soft deleted: - PR
1$this->assertNotSoftDeleted($model);2$this->assertNotSoftDeleted('posts', ['id' => 1]);
Other
-
stripTags()
string method - PR -
lang_path()
helper that will look for the lang directory in both the resources path and a top-level lang folder in the root of a Laravel project - PR - Collections "has any" Method - PR
-
createOneQuietly
andcreateManyQuietly
methods for model factories that can create one or many models and persist them to the database without model events. - String headline method - PR
- restrictOnUpdate migration method- PR