Как принять несколько экземпляров модели на вход метода контроллера?

Всем доброго времени суток. Я новичок в 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 шт):

Автор решения: Graf_Men

Согласно документации внутрь метода приходит объект который найден за свойством (который вы указали, по-умолчанию по id) либо 404 ошибка. Скорее всего лучше не оперировать объектами в таком случае, и вручную пытаться достать объект, т.к. это уже относится к бизнес-логике приложения.

→ Ссылка