This is a follow up to the original 15 Random Laravel Snippets & Methods post.
Here are 15 more Laravel snippets/methods I use or have saved for later:
1. Prevent N+1 with an Exception
1// Add to AppServiceProvider2 3Model::preventLazyLoading(! app()->isProduction());
2. Don't allow unvalidated array keys
1// Add to AppServiceProvider2 3Validator::excludeUnvalidatedArrayKeys();
3. Update a model without raising events
1// `updateQuietly` works like `update()` but without raising events2
Cursor Pagination
4.The main difference between offset and cursor pagination is that offset pagination uses an offset clause while cursor pagination uses a where clause with a comparison operator.
1// Cursor pagination outperforms offset pagination by up to 400X2 3$users = User::orderBy('id')->cursorPaginate(10);
One of Many Relationships
5.1/**2 * Get the user's most recent order.3 */4public function latestOrder()5{6 return $this->hasOne(Order::class)->latestOfMany();7}
6. firstWhere
1Category::firstWhere('slug', $slug);2 3// instead of4 5Category::where('slug', $slug)->first();
7. Str::replace
1use Illuminate\Support\Str; 2 3Str::replace('dead', 'alive', 'PHP is dead'); 4 5/* PHP is alive */ 6 7Str::of('PHP is dead')->replace('dead', 'alive'); 8 9/*10Illuminate\Support\Stringable {#409111 value: "PHP is alive",12}13*/
8. Checking if models are the same
1$user = User::find(1);2$sameUser = User::find(1);3 4if ($user->is($sameUser)) {5 // Same model6}
9. Don't update timestamps when saving
1$user->save(['timestamps' => false]);
10. tap()
Force any method on an object to return the object itself.
1// Returns bool2$user = $user->update(['name' => 'Anthony']);3 4// Updates user and returns original model5$user = tap($user)->update(['name' => 'Anthony']);
11. Ignore Trashed Models in Unique Validation Rule
Philo Hermans contributed a ignoreTrashed() validation rule which is syntactic sugar for the following rule:
1// Before 2[ 3 'email'=> [ 4 Rule::unique('users')->whereNull('deleted_at'), 5 ], 6]; 7 8// After 9[10 'email'=> [11 Rule::unique('users')->ignoreTrashed(),12 ],13];
12. @class
Dan Harrin contributed a @class Blade directive that allows developers to use conditional classes on any HTML element:
1<span @class([2 'text-sm',3 'font-bold' => $active,4])>5 Dashboard6</span>
13. Download Assertions
1// Assert the response returned a download2$response->assertDownload();3 4// Assert the response is a download with a given file name.5$response->assertDownload('invoice.pdf');
14. Password Validation Rules
1$request->validate([ 2 'password' => [ 3 'required', 4 'confirmed', 5 Password::min(8) 6 ->mixedCase() 7 ->letters() 8 ->numbers() 9 ->symbols()10 ->uncompromised(),11 ],12]);
15. Assert an input is not present
1$validated = $request->validate([2 'name' => 'required|max:255',3 'key' => 'prohibited',4]);5 6// Response: 4227// The key field is prohibited