Blade - 试图获取非对象的属性

Posted

技术标签:

【中文标题】Blade - 试图获取非对象的属性【英文标题】:Blade - Trying to get property of non-object 【发布时间】:2020-03-28 06:22:32 【问题描述】:

我有一个显示订单详细信息的视图,但无法读取所有者的属性名称。

错误信息

试图获取非对象的属性“名称”(查看:C:\xampp\htdocs\Cuppy_Webshop\resources\views\orders\showOrder.blade.php

控制器

public function show($id)
        $order = Order::with(['owner' => function ($query)
            $query->select('id', 'name');
        ])->where('id', '=', $id)->firstOrFail();

        return view('orders/showOrder', [
            'order' => $order,
        ]);
    

型号

public function owner()
        return $this->belongsTo('App\User', 'owner');
    

刀片

<tbody>
                    <tr>
                        <td scope="col">$order->id</td>
                        <td scope="col">$order->clip</td>
                        <td scope="col">$order->engraving</td>
                        @if ($order->engraving == 1)
                        <td scope="col">$order->front_img</td>
                        <td scope="col">$order->back_img</td>
                        @endif
                        <td scope="col">$order->location</td>
                        <td scope="col">$order->ordered_at</td>
                        <td scope="col">$order->delivered_at</td>
                        <td scope="col">$order->status</td>
                        <td scope="col">$order->cup_id</td>
                        <td scope="col">$order->owner->name</td>
                    </tr>
                </tbody>

JSON

我让控制器返回 json 以查看格式是否有问题或属性名称是否未发送。一切似乎都很好:


    "id": 1,
    "clip": 1,
    "engraving": 1,
    "front_img": "Zelda",
    "back_img": "Ultra Smurf",
    "location": "Foodlab",
    "ordered_at": "2019-11-28 15:30:37",
    "delivered_at": null,
    "status": "not payed",
    "cup_id": 1,

    //the owner object
    "owner": 
        "id": 1,
        "name": "Daan"
    

我尝试了什么

我尝试将所有者的名称称为关联数组,但返回 null。我在视图中转储了$order,该视图确实显示所有者具有属性名称。谷歌搜索只是给了我归结为语法错误或错误使用 ORM 的结果。让朋友查看我的代码是否有语法错误,但一无所获。

【问题讨论】:

所有者是一个模型,您在 Order 模型中是否有正确的外键绑定?听起来好像 $order->owner 函数没有返回关系实例,你能发布 owner() 函数吗? @Tim Yes Owner 是 Model 我将发布具有关系的函数 【参考方案1】:

这可能是因为您的记录可能没有所有者。 您可以在查询中使用whereHas 而不是with,或者更改此行:

<td scope="col">$order->owner->name</td>

到这里:

<td scope="col">$order->owner ? $order->owner->name:"no owner"</td>

您可以在laravel documentation阅读更多内容。

【讨论】:

订单需要有所有者。如果您查看我提供的 JSON 代码,它显示它正在发送一个带有 id 和名称的所有者对象,但是当我在刀片中调用它时,它说它是一个非对象类型并且不能调用该属性。我将编辑帖子以突出显示该对象。【参考方案2】:

也许你的模型应该是这样的?

public function owner() 
   return $this->belongsTo(User::class, 'id_user');

【讨论】:

问题是没有像您在 JSON 代码中看到的那样获取数据。问题是访问刀片中所有者属性的名称属性。据我所知,控制器方面一切正常。 我建议对模型进行更改,因为我在我的一个应用程序中遇到了类似的问题(数据在 JSON 中,但我无法在视图中访问它)并且我试图查看问题在另一种方式。然后我修改了模型并解决了问题。问题在于模型中的关系。

以上是关于Blade - 试图获取非对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:ErrorException(E_ERROR)试图获取非对象的属性(视图:..../show.blade.php)[关闭]

Auth::user 试图获取非对象的属性

试图获取非对象的属性“品牌”(查看:D:\Laravel\Laravel Internship\Laravel file\resources\views\carrental\index.blade.p

Laravel 5.5 - 试图获得非对象的属性

试图获取非对象的属性'id'如何解决?

试图在 laravel 5.4 上获取非对象错误的属性