php - 迭代结果时尝试获取非对象的属性
问题描述
我试图通过传递(索引刀片)页面的 id 来显示报价表的数据,但是当我打开(详细信息刀片)时会显示此错误:
试图获取非对象的属性“标题”
(详细信息刀片)页面(此页面中显示错误):
<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
(索引刀片)页面:
<div class="container">
<div class="d-flex justify-content-center">
@if(isset($offers) && $offers -> count()> 0)
@foreach($offers as $offer)
<div class="col-md-4 mb-4">
<div class="card">
<div class="card-body text-center">
<h4>{{$offer -> title}}</h4>
<p>{{$offer -> contnet}}</p>
<img src="https://www.91-img.com/pictures/133432-v4-xiaomi-mi-a3-mobile-phone-large-1.jpg?tr=q-60">
<br> <br>
<a id="home-updates-angular" href="{{route('test_object.details', $offer -> id)}}" role="button" class="btn btn-success px-3 waves-effect waves-light">التفاصيل</a>
</div>
</div>
</div>
@endforeach
@endisset
</div>
</div>
路线:
Route::get('/test_object', 'testController@test_object')->name('test_object');
Route::get('/object/{id}', 'testController@object')->name('test_object.details');
控制器:
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);
它显示了这个 JSON:
{
"id": 1,
"title": "Samsung Galaxy S21",
"description": "Zoom X100",
"price": 20000
}
所以,它应该像这样在(细节刀片)中工作:
$details -> title
或任何物体
解决方案
从文档:
findOrFail .. 方法将检索查询的第一个结果;
注意“第一个结果” - 不是结果集合,而是一个结果。所以$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>
旁注:这里有很多评论和答案说您的变量名和对象运算符之间的空格->
是错误的并导致错误。事实上,空间工作得很好(令人惊讶,至少对我来说),虽然你可以从评论的数量中看出它是非常不寻常的,而且我预计会被认为是糟糕的编码风格。
推荐阅读
- c# - 从 Nitra 语法迁移到 Antlr4
- regex - 在 awk 的正则表达式中删除除逗号之外的所有标点符号
- c# - 本地化 TextBlock 格式的文本
- html - 浏览 html 表格中输入的单元格
- javascript - 在网站上推进图像滑块时页面滚动
- python - 图形没有保存在函数中的 plotly-dash 中。我该如何解决?
- mysql - 为什么 MySQL 的 GROUP BY 中不允许使用别名?
- javascript - VBscript 从 IE 元素创建对象
- typescript - 离子科尔多瓦:文件传输不工作。配置错误?
- vbscript - 使用带有 SSL 加密的 Vbscript(UFT) 的 Azure 云数据库的连接字符串