С этой сигнатурой метода $id
является экземпляром модели. Eloquent Models реализует Illuminate\Contracts\Support\Arrayable
. Если вы передадите что-то Arrayable
или массив в find
, который вызывает findOrFail
, он будет рассматривать это так, как будто вы ищете несколько записей, и вернет коллекцию.
У вас есть Коллекция, а не экземпляр модели.
Если бы ваша подпись метода не вводила намек на модель, это имело бы больше смысла, поскольку у вас был бы 'id'. Если вы вводите модели хинтинга для этих методов, обычно вы будете использовать привязку модели маршрута.
Привязка модели маршрута:
public function show(Blog $blog)
{
// $blog is the matching record
}
Без привязки модели и просто получение параметра:
public function show($blog)
{
// $blog is just the 'id' or what ever you decided to pass in the URL
}
У ваших маршрутов есть параметр с именем blog
, потому что ваш ресурс назван «блог». Чтобы неявная привязка модели маршрута существовала, вы должны сопоставить имя параметра с именем параметра в подписи.