Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Як налаштувати пошук моделі для параметра маршруту?

Неявна прив'язка за замовчуванням шукає модель за первинним ключем. Є кілька рівнів налаштування - від простого до повного контролю.

Інша колонка для одного маршруту:

Route::get('/posts/{post:slug}', [PostController::class, 'show']);

Інша колонка для моделі завжди:

public function getRouteKeyName(): string
{
    return 'slug';
}

Власна логіка - наприклад, лише опубліковані пости для гостей:

public function resolveRouteBinding($value, $field = null): ?Model
{
    return $this->where($field ?? $this->getRouteKeyName(), $value)
        ->when(! auth()->user()?->isEditor(), fn ($q) => $q->published())
        ->first();
}

null дає 404.

Явна прив'язка в провайдері - коли параметр не відповідає моделі напряму:

Route::bind('user', fn (string $value) => User::where('name', $value)->firstOrFail());

Поряд корисне:

  • ->withTrashed() на маршруті - знаходити м'яко видалені моделі;
  • ->missing(fn () => redirect(...)) - що робити замість 404;
  • scopeBindings() - вкладена модель шукається через батьківську, і чужий ID не пройде.

Важливо: прив'язка моделі - це пошук, а не авторизація. Перевірку прав робить політика.

Докладніше в документації: Налаштування логіки розв'язання

Перевір себе

20 випадкових питань за спробу, після завершення - розбір кожної помилки

Схожі питання