Implicit route model binding removes the find()

Every controller method that takes an id begins the same way: find the record, check it exists, abort with a 404. Multiply that by every route and it is a lot of identical lines with one place to forget the check.

// before
public function show($id)
{
    $order = Order::findOrFail($id);
}

// after — the type hint does it, 404 included
public function show(Order $order)
{
}

// bind on something other than the primary key
public function getRouteKeyName() { return 'reference'; }

The parameter name must match the route segment or the binding silently does not happen and you get an empty model, which is the one failure worth knowing about. getRouteKeyName() on the model changes the column globally rather than per route, so a model addressed by id in the admin and by slug on the front end still needs explicit binding for one of them.