Как принять несколько экземпляров модели на вход метода контроллера?
Всем доброго времени суток. Я новичок в Laravel и не могу понять следующую вещь.
К примеру, есть модели Blog (id, name) и Post (id, blog_id, name).
Когда я создаю маршруты:
Route::get('/blog/{id}', [BlogController::class, 'show']);
Route::get('/post/{id}', [PostController::class, 'show']);
то могу в контроллере использовать код вроде такого:
public function show(Request $request, Blog $blog) {
var_dump($blog);
}
public function show(Request $request, Post $post) {
var_dump($post);
}
и это работает!
Но вот что делать, если я хочу создать маршрут типа:
Route::get('/blog/{blogID}/post/{postID}', [PostController::class, 'show']);
Тогда в контроллере следующий код дает неправильный (с моей точки зрения) результат:
public function show(Request $request, Blog $blog, Post $post) {
var_dump($blog);
var_dump($post);
}
В этом случае в переменной $blog хранится объект Blog c id = {blogID}.
Но в переменную $post попадает new Post() вместо экземпляра существующей модели.
Может кто-нибудь обьяснить, как это работает?
Ответы (1 шт):
Согласно документации внутрь метода приходит объект который найден за свойством (который вы указали, по-умолчанию по id) либо 404 ошибка. Скорее всего лучше не оперировать объектами в таком случае, и вручную пытаться достать объект, т.к. это уже относится к бизнес-логике приложения.