@4sadly

Как исправить конфликт маршрутов?

Хочу получать пользователей по их текущему отделу:
Route::apiResource('staffs/{staff_id}/users', UserController::class);

И получать список отделов, к которым у пользователей есть доступ
Route::apiResource('users/{user_id}/staffs', ?::class);

И получать всех отделов
Route::apiResource('staffs', StaffController::class);


Какой контроллер я должен использовать?
1 таблица имеет 2 столбца user_id и staff_id
2 таблица имеет N столбцов, один из них это staff_id
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
apiResource есть смысл только для и то только если у тебя есть index, store, show, update, destroy (https://laravel.com/docs/8.x/controllers#actions-h...)
Route::apiResource('staffs', StaffController::class);

Для пользователей по их текущему отделу если такой url то думаю будет подходить __invoke класс
Route::get('staffs/{staff_id}/users', UserStaffController::class);

И соответственно для отделов у пользователя так
Route::get('users/{user_id}/staffs', StaffUserController::class);


Но я рекомендую сделать с помощью фильтров к примеру взять список пользователей у которых есть отдел /users?staff_id=1 и список отделов у которого есть пользователь /staffs?user_id=1

Тогда будет достаточно просто так для полноценного crud + есть фильтр + легко добавить параметры фильтра
Route::apiResource('users', UserController::class);
Route::apiResource('staffs', StaffController::class);

А фильтр можно и самому написать и заюзать либы (к примеру spatie/laravel-query-builder)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы