属性 [标题] 在此集合实例上不存在

2022-08-30 07:01:31

我正在关注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)

我做错了什么?


答案 1

当你使用时,你会得到一个集合。在这种情况下,您需要迭代它以获取属性:get()

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

或者,您可以按其索引获取其中一个对象:

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

或者从集合中获取第一个对象:

{{ $collection->first() }}

当您使用或获取对象时,您可以使用简单的方式获取属性:find()first()

{{ $object->title }}

答案 2

使用方法,你得到一个集合(所有与查询匹配的数据),尝试使用,它只返回一个元素,如下所示:get()first()

$about = Page::where('page', 'about-me')->first();

推荐