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


99

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

我究竟做错了什么?

Answers:


242

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

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

或者,您也可以通过索引获得对象之一:

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

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

{{ $collection->first() }}

当您使用find()first()获得对象时,可以使用以下简单方法获取属性:

{{ $object->title }}

是的,在执行Model-> get()获得具有一个对象的列表之后,由于这个原因,总是显示数据,而我无法访问它。exexute后第一个(),然后让对象
鲁本·鲁伊斯

4
经过4小时的搜索,阅读和测试Laravel文档并访问了很多StackOverflow问题/答案,您是唯一提到的get()检索集合的人。是您让我跳下椅子,意识到我所有的询问都是正确的。问题在“印刷品”上。衷心感谢您的回答!我真心的!
Grinnex。

23

使用get()method可以得到一个集合(所有与查询匹配的数据),请尝试使用first()它,它仅返回一个元素,如下所示:

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

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

代替 get()

它适用于我的项目。谢谢。


3
尽管这可以回答作者的问题,但缺少一些解释性的单词和/或指向文档的链接。没有一些原始短语的话,原始代码片段不是很有用。您可能还会发现如何写一个好的答案很有帮助。请编辑您的答案-点评
尼克

1

您应该在Controller中使用Collection关键字。像这儿..

public function ApiView(){
    return User::collection(Profile::all());
}

在这里,用户是资源名称,配置文件是型号名称。谢谢。


1

一个人在使用工厂功能时可能会得到这个,所以我可以确认这是有效的语法:

$user = factory(User::class, 1)->create()->first();

如果执行以下操作,则可能会看到集合实例错误:

$user = factory(User::class, 1)->create()->id;

因此将其更改为:

$user = factory(User::class, 1)->create()->first()->id;

0

$about->first()->id或者 $stm->first()->title,您的问题已解决。


我的代码建议适用于修补程序,但不适用于该项目。
Onyash Ed
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.