Я работаю над REST API с laravel.
У меня есть таблица блогов
Schema::create('blogs', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->longtext('body');
$table->string('friendly_url');
});
У меня есть мой маршрут, настроенный для контроллера шоу, который будет отображать блог, поиск по идентификатору
Маршрут
Route::get('/{id}', 'BlogController@show');
Контроллер
public function show($id)
{
$blog = Blog::find($id);
if (!$blog) {
return response()->json([
'message' => '404 Not Found'
], 400);
}
return response()->json($blog, 200);
}
Итак, получив доступ
/api/blog/1
я получил
{
"id": 1,
"title": "title of my blog",
"body": "conteudo do meu blog",
"friendly_url": "title-of-my-blog",
"category_id": 2
}
но я хочу проверить блог также по удобному URL
/api/blog/{friendly-url} OR {id}
/api/blog/title-of-my-blog
и получите тот же результат
Хотелось бы узнать, как это сделать лучше всего, кому может помочь?
проблема в том, что маршрут получает только один параметр, идентификатор






Мне обычно не нравится идея использовать id или "slug" / "friendly url" с той же структурой ссылок, но разве вы не можете просто сделать:
$blog = Blog::where('id', $id)->orWhere('friendly_url', $id)->first();
Я бы рекомендовал просто использовать удобный URL. У вас есть это поле по какой-то причине, хотя оно должно быть уникальным в базе данных.
Спасибо большое
Я не сказал, что у меня проблема, я спросил его, что он хочет делать.