我在看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)
)中,它按预期显示数据。
我做错了什么?
8条答案
按热度按时间kyxcudwk1#
当你使用
get()
时,你会得到一个集合。在这种情况下,你需要迭代它来获取属性:或者你可以通过索引获取一个对象:
或者从集合中获取第一个对象:
当你使用
find()
或first()
时,你会得到一个对象,所以你可以用简单的方法获得属性:ruoxqz4g2#
使用
get()
方法,你会得到一个集合(所有与查询匹配的数据),尝试使用first()
,它只返回一个元素,像这样:nfs0ujit3#
一个人在使用工厂函数时可能会得到这个,所以我可以确认这是有效的语法:
如果执行以下操作,可能会看到集合示例错误:
因此将其更改为:
yks3o0rb4#
你可以尝试使用first()而不是get()方法
uyhoqukh5#
你应该在控制器中使用集合关键字。像这里..
这里,用户是资源名称,配置文件是模型名称。谢谢。
1mrurvl16#
$about->first()->id
或$stm->first()->title
,问题就解决了。eoxn13cs7#
由于
$about = Page::where('page', 'about-me')->get()
是一个laravel集合,您可以使用pluck()
方法获取特定属性,如 title,该方法在www.example.com中有描述https://laravel.com/docs/master/collections#method-pluck。huwehgph8#
存储在about valiable中的信息是集合格式的,所以你只需要循环遍历它。