2016-12-28 68 views
23

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

我得到错误说:

Property [title] does no t存在于此收集实例中。 (查看: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))它按预期显示数据。

我在做什么错了?

回答

68

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

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

或者你可以得到一个对象通过它的指数:

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

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

{{ $collection->first() }} 

当您使用find()first()时,您将得到一个对象,因此您可以使用简单的属性:

{{ $object->title }} 
0

随着get()方法你得到一个集合(与查询匹配的所有数据),尝试使用first()相反,它返回只有一个元素,像这样:

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