Свойство [название] не существует в этом экземпляре коллекции


Я слежу за видеороликами 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)) он отображает данные, как и ожидалось.

Что я делаю не так?

Author: kenorb, 2016-12-28

2 answers

Когда вы используете get(), вы получаете коллекцию . В этом случае вам нужно повторить его, чтобы получить свойства:

@foreach ($collection as $object)
    {{ $object->title }}
@endforeach

Или вы можете просто получить один из объектов по его индексу:

{{ $collection[0]->title }}

Или получить первый объект из коллекции:

{{ $collection->first() }}

Когда вы используете find() или first(), вы получаете объект , поэтому вы можете получить свойства с помощью простого:

{{ $object->title }}
 103
Author: Alexey Mezenin, 2016-12-28 16:34:20

С помощью метода get() вы получаете коллекцию (все данные, соответствующие запросу), попробуйте вместо этого использовать first(), он возвращает только один элемент, например:

 $about = Page::where('page', 'about-me')->first();
 10
Author: Alex, 2018-03-09 17:38:51