Property [title] does not exist on this collection instance

杀马特。学长 韩版系。学妹 提交于 2019-11-26 03:20:56

问题


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:


You Should Used Collection keyword in Controller. Like Here..

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

Here, User is Resource Name and Profile is Model Name. Thank You.




回答4:


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

in stead of get().

It works on my project. Thanks.




回答5:


$about->first()->id or $stm->first()->title and your problem is sorted out.




回答6:


A person might get this while working with factory functions, so I can confirm this is valid syntax:

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

You might see the collection instance error if you do something like:

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

so change it to:

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


来源:https://stackoverflow.com/questions/41366092/property-title-does-not-exist-on-this-collection-instance

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