# A Beginner's Guide to Route Model Binding in Laravel

## What is Route Model Binding?

Route model binding is a mechanism that binds a route parameter to a model. Instead of manually fetching a model instance from the database using the route parameter, **Laravel** does this for you automatically.

For example, in a typical route without model binding, you might write:

```php
Route::get('/users/{id}', function ($id) {
    $user = User::find($id);
    
    if(!$user){
        return abort(404,"User not found");
    }

    return view('user.profile', ['user' => $user]);
});
```

With route model binding, this can be simplified to:

```php
Route::get('/users/{user}', function (User $user) {
    return view('user.profile', ['user' => $user]);
});
```

As you can see, the code is simpler and cleaner. **Laravel** automatically finds the user based on the `id` parameter.

---

### 1\. Route Model Binding

**Laravel** automatically finds the model for you based on the route parameter name. Here's an example:

**Route Definition:**

```php
Route::get('/posts/{post}', function (Post $post) {
    return view('posts.show', ['post' => $post]);
});
```

In this case, Laravel uses the `id` column to find the post in the database. You don’t need to write any extra code!

**Controller Example:**

```php
public function show(Post $post)
{
    return view('posts.show', ['post' => $post]);
}
```

**Note**: You must use the same parameter name in both the route and the method. As you can see, we define the `/{post}` parameter in the route, and we also define the `post` parameter in the show method.

#### Using a Custom Column

Sometimes, you might want to use a column other than `id` to find the model. You can do this by adding a method to your model:

```php
class Post extends Model
{
    public function getRouteKeyName()
    {
        return 'slug';
    }
}
```

Now, **Laravel** will look for a post using the `slug` column instead of `id`.

---

## What Happens if a Model is Missing?

If Laravel can’t find the model, it will show a 404 error by default. You can customize this behavior by editing the `render` method in the `Handler` class.

```php
use Illuminate\Database\Eloquent\ModelNotFoundException;

public function render($request, Throwable $exception)
{
    if ($exception instanceof ModelNotFoundException) {
        return response()->view('errors.404', [], 404);
    }

    return parent::render($request, $exception);
}
```

---

## Why Use Route Model Binding?

1. **Saves Time:** You don’t need to write extra code to fetch models.
    
2. **Cleaner Code:** Your routes and controllers are easier to read.
    
3. **Customizable:** You can use any column (like `slug`) for route model binding.
    
4. **Consistent Behavior:** Centralized logic for fetching models.
    

**Note**: I wrote this article to be super beginner-friendly, so you can discover Route Model Binding in just a minute. If you're interested in more advanced features, be sure to check out the official Laravel documentation.

---

## Conclusion

Route model binding is a beginner-friendly feature that makes working with Laravel routes much easier. It reduces the amount of code you need to write and keeps everything clean and organized. Start using it today to make your Laravel projects more efficient!
