laravel 属性[title]在此集合示例上不存在

xn1cxnb4  于 2023-04-07  发布在  其他
关注(0)|答案(8)|浏览(177)

我在看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

我得到的错误是:
此集合示例上不存在属性[title]。(视图:网址:http://www.laragon.com
但是如果我改变控制器文件中的检索方法,它就能工作了。

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

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

当我在第一种情况(where()->get())中使用dd($about)时,数据被一个数组封装。在第二种情况(find(3))中,它按预期显示数据。
我做错了什么?

kyxcudwk

kyxcudwk1#

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

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

或者你可以通过索引获取一个对象:

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

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

{{ $collection->first() }}

当你使用find()first()时,你会得到一个对象,所以你可以用简单的方法获得属性:

{{ $object->title }}
ruoxqz4g

ruoxqz4g2#

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

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

nfs0ujit3#

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

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

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

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

因此将其更改为:

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

yks3o0rb4#

你可以尝试使用first()而不是get()方法

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

uyhoqukh5#

你应该在控制器中使用集合关键字。像这里..

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

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

1mrurvl1

1mrurvl16#

$about->first()->id$stm->first()->title,问题就解决了。

eoxn13cs

eoxn13cs7#

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

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

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

huwehgph8#

存储在about valiable中的信息是集合格式的,所以你只需要循环遍历它。

@if(count($about))
   @foreach($about as $page)
    {{$page->title}}
   @endforeach
@endif

相关问题