刀片-尝试获取非对象的属性

时间:2019-12-03 14:25:13

标签: php laravel laravel-blade laravel-6

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

错误消息

  

试图获取非对象的属性“名称”(视图: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。一位朋友查看我的代码中是否存在语法错误,但一无所获。

2 个答案:

答案 0 :(得分:0)

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

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

对此:

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

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

答案 1 :(得分:0)

也许您的模型应该是这种方式?

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