Я следую видео 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
Я получаю сообщение об ошибке:
Свойство [title] не существует в этом экземпляре коллекции. (Вид: 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)
) он отображает данные, как ожидалось.
Что я делаю не так?
Когда вы используете get()
вы получаете коллекцию . В этом случае вам нужно перебрать его, чтобы получить свойства:
@foreach ($collection as $object) {{ $object->title }} @endforeach
Или вы можете просто получить один из объектов по его индексу:
{{ $collection[0]->title }}
Или получить первый объект из коллекции:
{{ $collection->first() }}
Когда вы используете find()
или first()
вы получаете объект , поэтому вы можете легко получить свойства:
{{ $object->title }}