Php 在迭代结果时尝试获取非对象的属性
我试图通过传递索引刀片页面的id来显示报价表的数据,但在打开详细信息刀片时会显示此错误: 正在尝试获取非对象的属性“title” 此页面中显示错误的详细信息刀片页面:Php 在迭代结果时尝试获取非对象的属性,php,laravel,object,Php,Laravel,Object,我试图通过传递索引刀片页面的id来显示报价表的数据,但在打开详细信息刀片时会显示此错误: 正在尝试获取非对象的属性“title” 此页面中显示错误的详细信息刀片页面: <div class="container row d-flex justify-content-center"> <div class="col-md-4 mb-4 float-left"> @foreach($details as $detail)
<div class="container row d-flex justify-content-center">
<div class="col-md-4 mb-4 float-left">
@foreach($details as $detail)
<div class="card">
<div class="card-body text-center">
<h5 class="mt-0 mb-1 mb-2">{{$detail-> title}}</h5>
<p class="grey-text mb-2" >{{$detail-> description}}</p>
<p class="grey-text mb-2" id="price" >{{$detail-> price}}</p>
<img
src="https://www.91-img.com/pictures/133432-v4-xiaomi-mi-a3-mobile-phone-large-1.jpg?tr=q-60"
class="my-3" alt="Angular logo">
<br>
<br>
<a id="checkout" href="{{route('offers.checkout', $detail -> price )}}"
role="button" class="btn btn-success px-3 waves-effect waves-light"> شراء المنتج
</a>
</div>
</div>
@endforeach
控制器:
public function test_object()
{
$offers = Offer::get();
return view('front.indext', compact('offers'));
}
public function object($id)
{
$details = Offer::findOrFail($id);
return view('front.detailst', compact('details'));
}
当我回来时:
return $details = Offer::findOrFail($id);
它显示了以下内容:
{
"id": 1,
"title": "Samsung Galaxy S21",
"description": "Zoom X100",
"price": 20000
}
所以,它应该在细节方面起作用,比如:
$details -> title
或任何对象:
芬多尔失败了。。方法将检索查询的第一个结果
注意第一个结果-不是结果的集合,而是一个结果。因此$details这里是一个模型实例(如果找到):
$details = Offer::findOrFail($id);
您已经通过检查$details验证了这一点,您可以看到它是单个模型,而不是集合:
{
"id": 1,
...
}
一个模型的集合如下所示:
[{
"id": 1,
...
}]
但视图试图在单个模型上迭代:
@foreach($details as $detail)
由于$details是单个模型实例,因此将尝试迭代其属性,这将失败
如果只向视图传递单个模型,只需删除@foreach迭代即可显示它。将控制器中的变量名更改为$detail也是有意义的,因为它是单数的
<div class="container row d-flex justify-content-center">
<div class="col-md-4 mb-4 float-left">
<div class="card">
<div class="card-body text-center">
<h5 class="mt-0 mb-1 mb-2">{{ $detail->title }}</h5>
旁注:这里有很多评论和答案说变量名和对象操作符->之间的空格是错误的,并导致了错误。事实上,至少对我来说,空格工作得非常好,尽管从评论的数量可以看出,这是非常不寻常的,而且我希望被认为是糟糕的编码风格。{{$detail->title}为什么在->和title之间有空格?移除那里的空间并检查。像这样的$details->titlelet让我知道它是否起作用。这感觉很相关:@foreach如果我做这样的细节就会起作用:$details[]现在我明白为什么了
@foreach($details as $detail)
<div class="container row d-flex justify-content-center">
<div class="col-md-4 mb-4 float-left">
<div class="card">
<div class="card-body text-center">
<h5 class="mt-0 mb-1 mb-2">{{ $detail->title }}</h5>