Внедрение моделей

Неявное внедрение моделей

Laravel автоматически внедряет модели, определенные в маршруте или контроллера, если имена переменных совпадают с сегментом имени маршурта.

use App\Models\User;

Route::get('/users/{user}', function (User $user) {
    return $user->email;
});

То же самое для маршрута с контроллером:

use App\Http\Controllers\UserController;
use App\Models\User;

//Определение маршрута...
Route::get('/users/{user}', [UserController::class, 'show']);

// Определение контроллера...
public function show(User $user)
{
    return view('user.profile', ['user' => $user]);
}

Указание друго ключа для выбора из базы данных

Если для выбора из базы данных нужно использовать другой ключ, отличны от id, тогда можно задать его вручную:

use App\Models\Post;

Route::get('/posts/{post:slug}', function (Post $post) {
    return $post;
});

Явная привязка модели

Кроме встроенной неявной привязки моделей к маршруту можно использовать явную привязку.

Для этого необходимо использовать метод model маршрута для указания класса указанного параметра.

Явную привязу модели следует определить в начале метода boot класса RouteServiceProvider

use App\Models\User;
use Illuminate\Support\Facades\Route;

/**
 * Define your route model bindings, pattern filters, etc.
 *
 * @return void
 */
public function boot()
{
    Route::model('user', User::class);

    // ...
}

После этого следует определить маршрут, который содержит параметр {user}

use App\Models\User;

Route::get('/users/{user}', function (User $user) {
    //
});