Anvil
Anvil - The mobile companion for Laravel Forge. Available now. Download for iOS

15 Random Laravel Snippets & Methods, Part 2

I write code blocks down that I know I won't use often and will forget about. Every so often I go through them to refresh my memory.

AR
Anthony Rappa
2 min read - 9,693 views -

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 AppServiceProvider
2 
3Model::preventLazyLoading(! app()->isProduction());

2. Don't allow unvalidated array keys

1// Add to AppServiceProvider
2 
3Validator::excludeUnvalidatedArrayKeys();

3. Update a model without raising events

1// `updateQuietly` works like `update()` but without raising events
2 
3$user->updateQuietly(['email' => '[email protected]']);

4. Cursor Pagination

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 400X
2 
3$users = User::orderBy('id')->cursorPaginate(10);

5. One of Many Relationships

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 of
4 
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 {#4091
11 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 model
6}

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 bool
2$user = $user->update(['name' => 'Anthony']);
3 
4// Updates user and returns original model
5$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 Dashboard
6</span>

13. Download Assertions

1// Assert the response returned a download
2$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: 422
7// The key field is prohibited

Read next

Exploring PHP 8.5's New Pipe Operator: A Fresh Perspective

Among the exciting features in PHP 8.5, the pipe operator stands out as a game-changing addition to the language's syntax arsenal. This innovative operator transforms how we write sequential operations, making code more intuitive and less nested. Let's dive into this new feature and discover how it can revolutionize your PHP coding practices.

4 min read - 4,439 views -