此集合实例上不存在属性[title]。

16 浏览
0 Comments

此集合实例上不存在属性[title]。

我正在跟随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)),它会按预期显示数据。

我做错了什么?

admin 更改状态以发布 2023年5月21日
0
0 Comments

使用get()方法可以获取匹配查询的所有数据的集合,尝试改用first()来代替,它仅返回一个元素,像这样:

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

0
0 Comments

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

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

或者你可以通过索引获取其中一个对象:

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

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

{{ $collection->first() }}

当使用find()first()时,你会得到一个对象,因此你可以用简单的方法获取属性:

{{ $object->title }}

0