Я бы хотел иметь возможность фильтровать ответ json, используя некоторые поля в базе данных, например, api / v1 / user? Username = mary, но не знаю, как это сделать. Мой второй вопрос заключается в том, что маршрут api / v1 / user / 3 работает, но я не могу вспомнить, как я это настроил, поскольку я делал это когда-то go. Кто-нибудь может помочь?
api. php
Route::group(['prefix' => 'v1'], function () {
Route::apiResource('/user', 'UserController');
});
пользовательский ресурс
public function toArray($request)
{
return parent::toArray($request);
}
пользовательский контроллер
public function show(User $user): UserResource
{
return new UserResource ($user);
}
public function index(): UserResourceCollection
{
return new UserResourceCollection(User::orderBy('created_at', 'desc')
->paginate(5)
);
}
public function store(Request $Request)
{
$request->validate([
'first_name' => 'required',
'last_name' => 'required',
'email' => 'required',
]);
$user = User::create($request->all());
\Mail::to($user)->send(new Welcome);
return new UserResourse($user);
}
public function update(User $user, Request $request): UserResource
{
$user->update($request->all());
return new UserResource($User);
}
public function destroy(User $user)
{
$user->delete();
return response()->json();
}
}
ОБНОВЛЕНО
Я видел несколько уроков с советами, которые дал пользователь ниже, но я не знаю, как их собрать, потому что у меня уже есть метод show выше. Я попытался закомментировать метод show и создать другой метод show для строки запроса
public function show(User $user): UserResourceCollection
{
$request->input('username');
return new UserResourceCollection(User::orderBy('created_at', 'desc')
->where('username', '=', $username)
->paginate(2)
);
}
и добавил маршрут GET
Route::group(['prefix' => 'v1'], function () {
Route::apiResource('/user', 'UserController');
Route::get('/user/{username?}','UserController@show');
});
Это работает как конечная точка. Часть разбивки на страницы работает, я сделал ее меньше, поэтому я знаю, что она вызывает метод, но она ищет по идентификатору, и я хочу искать по имени пользователя. В идеале я хочу использовать параметр запроса, такой как api / v1 / user? Username = mary.