Php 在迭代结果时尝试获取非对象的属性

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)

我试图通过传递索引刀片页面的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="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>