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

10 Random Laravel Snippets & Methods, Part 4

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 - 8,482 views -

This is the next iteration to the Laravel Snippets Series.

Here are 10 more Laravel snippets/methods I use or have recently saved for later:

1. Reorder orderBy()

If you try to use orderBy on a query that has already been ordered, it will not work since in SQL you can have multiple order by's in a query, so they just end up getting appended.

If you explicitly want to change the ordering, you can use reorder:

1// Consider a relationship
2public function posts()
3{
4 return $this->hasMany(Post::class)->latest();
5}
6 
7// The above already sets the orderBy to `created_at desc` so the following will not override that.
8$user->posts()->orderBy('updated_at', 'desc')->get(); // Still ordered by `created_at desc`
9 
10// Reorder to a different column
11$user->posts()->reorder()->orderBy('updated_at', 'desc')->get(); // Now ordered by `updated_at desc`
12 
13// Or more cleaner
14$user->posts()->reorder('updated_at', 'desc')->get();

2. isDirty()

Check if a model has been modified

1$product = Product::find(1);
2$product->isDirty() // false
3 
4$product->name = "New name";
5$product->isDirty() // true
6$product->isDirty('name') // true

3. @checked

Clean up your markup with the new @checked directive.

From:

1<input type="radio" name="active" value="1" {{ old('active', user->active)) ? 'checked' : '' }} />

To:

1<input type="radio" name="active" value="1" @checked(old('active', user->active)) />

4. @selected

Clean up your markup with the new @selected directive.

1<select name="active">
2 <option value="yes" {{ old('active', user->active)) ? 'selected' : '' }}>Yes</option>
3</select>

To:

1<select name="active">
2 <option value="yes" @selected(old('active', user->active))>Yes</option>
3</select>

5. foreignIdFor()

Instead of using foreignId with a string column, you can specify a model.

1$table->foreignIdFor(\App\Models\Author::class);

6. Route::controller

Laravel 8.80.0 release includes support for defining a common group controller once for a route group, then only providing the methods to the route definitions.

1Route::controller(OrderController::class)->group(function () {
2 Route::get('/orders/{id}', 'show');
3 Route::post('/orders', 'store');
4});

7. make:migration strings

From:

1php artisan make:migration create_users_table

To:

1php artisan make:migration "create users table"

8. Mail::alwaysTo()

Avoiding Accidental Email Sends with alwaysTo()

1// AppServiceProvider.php
2if (! app()->environment('production')) {
3 Mail::alwaysTo('[email protected]');
4}

9. str()

The str function returns a new Illuminate\Support\Stringable instance of the given string. This function is equivalent to the Str::of method:

1$string = str('Taylor')->append(' Otwell');
2 
3// 'Taylor Otwell'

10. skip() TransformRequests-type middleware

As of @laravelphp v8.36.0, you can skip 'TransformRequests' middlewares by registering a callback.

For example, you can use it on 'TrimStrings' and 'ConvertEmptyStringsToNull'

1ConvertEmptyStringsToNull::skipWhen(
2 fn (Request $request) => $request->is('admin/*')
3);
4 
5TrimStrings::skipWhen(
6 fn (Request $request) => $request->is('admin/*')
7);

Read next

Laravel Patches v4.0.0

We are excited to announce the release of Laravel Patches v4.0, featuring a completely rewritten test suite using Pest, enhanced CLI tools for better visibility, and robust safeguards for your patch workflow. This release focuses on developer experience and reliability, ensuring you can manage your database patches with the same confidence as your migrations.

2 min read - 2,696 views -