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

问题描述 投票:0回答:8

我正在关注 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:\larragon\www 电子网站 资源查看bout.blade.php)

但是如果我更改控制器文件中的检索方法,它就可以工作。

public function index()
{
    $about = Page::find(3);

    return view('about', compact('about'));
}

当我在第一种情况(

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

我做错了什么?

php laravel eloquent properties
8个回答
372
投票

当您使用

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

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

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

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

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

{{ $collection->first() }}

当你使用

find()
first()
时,你会得到一个 object,因此你可以通过简单的方法获取属性:

{{ $object->title }}

45
投票

使用

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

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

5
投票

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

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

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

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

所以将其更改为:

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

4
投票

你可以尝试使用first()代替方法get()

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

1
投票

您应该在控制器中使用 Collection 关键字。 就像这里..

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

这里,User 是资源名称,Profile 是模型名称。 谢谢你。


0
投票

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


0
投票

由于

$about = Page::where('page', 'about-me')->get()
是一个 Laravel 集合,您可以使用 pluck() 方法获取特定属性,如
title
,该方法在 https://laravel.com/docs/master/collections#method-pluck 中描述.

$titles = $about->pluck( 'title' )

@foreach($titles as $title)
    {{ $title }}
@endforeach

0
投票

关于valiable中存储的信息是集合格式的,所以你只需要循环遍历即可。

@if(count($about))
   @foreach($about as $page)
    {{$page->title}}
   @endforeach
@endif
© www.soinside.com 2019 - 2024. All rights reserved.