Свойство [название] не существует в этом экземпляре коллекции
Я слежу за видеороликами Laracasts: Базовая модель/Контроллер/Рабочий процесс просмотра.
У меня есть таблица с контактной информацией.
CREATE TABLE `about` (
`id` int(10) UNSIGNED NOT NULL,
`title` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
`content` text COLLATE utf8_unicode_ci,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Я пытаюсь передать данные для просмотра, используя следующий код в файле контроллера:
public function index()
{
$about = Page::where('page', 'about-me')->get(); //id = 3
return view('about', compact('about'));
}
Когда я пытаюсь показать код, как показано ниже,
@section('title')
{{$about->title}}
@stop
@section('content')
{!! $about->content !!}
@stop
Я получаю сообщение об ошибке, в котором говорится:
Свойство [название] не существует в этом экземпляре коллекции. (Просмотр: E:\laragon\www\newsite\resources\views\about.blade.php)
Но если я изменю метод извлечения в файле контроллера, это сработает.
public function index()
{
$about = Page::find(3);
return view('about', compact('about'));
}
Когда я использую dd($about)
в первом случае (where()->get()
), данные инкапсулируются массивом. Во втором случае (find(3)
) он отображает данные, как и ожидалось.
Что я делаю не так?
2 answers
Когда вы используете get()
, вы получаете коллекцию . В этом случае вам нужно повторить его, чтобы получить свойства:
@foreach ($collection as $object)
{{ $object->title }}
@endforeach
Или вы можете просто получить один из объектов по его индексу:
{{ $collection[0]->title }}
Или получить первый объект из коллекции:
{{ $collection->first() }}
Когда вы используете find()
или first()
, вы получаете объект , поэтому вы можете получить свойства с помощью простого:
{{ $object->title }}
С помощью метода get()
вы получаете коллекцию (все данные, соответствующие запросу), попробуйте вместо этого использовать first()
, он возвращает только один элемент, например:
$about = Page::where('page', 'about-me')->first();