Property [title] does not exist on this collection instance

匿名 (未验证) 提交于 2019-12-03 01:52:01

问题:

I am following Laracasts' videos: Basic Model/Controller/View Workflow.

I have a table holds contact information.

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 

I am trying to pass data to view using the following code in the controller file:

public function index() {     $about = Page::where('page', 'about-me')->get(); //id = 3      return view('about', compact('about')); } 

When I try to show the code as shown below,

@section('title')     {{$about->title}} @stop  @section('content')     {!! $about->content !!} @stop 

I get error that says:

Property [title] does not exist on this collection instance. (View: E:\laragon\www\newsite\resources\views\about.blade.php)

But if I change the retrieving method in the controller file, it works.

public function index() {     $about = Page::find(3);      return view('about', compact('about')); } 

When I use dd($about) in the first case (where()->get()) the data is encapsulated by an array. In the second case (find(3)) it displays data as expected.

What am i doing wrong?

回答1:

When you're using get() you get a collection. In this case you need to iterate over it to get properties:

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

Or you could just get one of objects by it's index:

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

Or get first object from collection:

{{ $collection->first() }} 

When you're using find() or first() you get an object, so you can get properties with simple:

{{ $object->title }} 


回答2:

With get() method you get a collection (all data that match the query), try to use first() instead, it return only one element, like this:

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


回答3:

------SOLVED----

When you're using get() its means laravel eloquent return row as object it return multiple row so if you want to use data use foreach

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

Or you could just get one of row by it's index:

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

Or get first object from collection:

{{ $collection->first() }} 

When you're using find() or first() you get an object, so you can get properties with simple:

{{ $object->title }} 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!