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

新手上路,请多包涵

我正在关注 Laracasts 的视频: Basic Model/Controller/View Workflow

我有一张桌子,里面有联系信息。

 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'));
}

当我在第一种情况下( where()->get() )使用 dd($about) 时,数据被一个数组封装。在第二种情况下( find(3) )它按预期显示数据。

我究竟做错了什么?

原文由 zkanoca 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 463
2 个回答

当你使用 get() 你会得到一个 collection 。在这种情况下,您需要对其进行迭代以获取属性:

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

或者您可以通过它的索引获取对象之一:

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

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

 {{ $collection->first() }}

当您使用 find()first() 您会得到一个 object ,因此您可以通过简单的方式获得属性:

 {{ $object->title }}

原文由 Alexey Mezenin 发布,翻译遵循 CC BY-SA 4.0 许可协议

about valable 中存储的信息是集合格式的,所以你只需要循环遍历它。

 @if(count($about))
   @foreach($about as $page)
    {{$page->title}}
   @endforeach
@endif

原文由 bastiany 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题