如何访问laravel中的对象字段?

Posted

技术标签:

【中文标题】如何访问laravel中的对象字段?【英文标题】:How to access a object field in laravel? 【发布时间】:2020-08-03 00:52:21 【问题描述】:

我使用 laravel 框架。我可以从与此代码相关的数据库中检索数据:

$orders = Order::with('orderType', 'orderStatus', 'user')->get();

上述命令的结果是:

[

  "id":16,
  "shop_id":1,
  "user_id":0,
  "delivery_cost":null,
  "address":null,
  "latitude":null,
  "longitude":null,
  "total_price":655000,
  "total_price_off":551000,
  "order_status_id":5,
  "order_type_id":3,
  "reserve_id":null,
  "created_at":"1399-02-01 13:25:51",
  "order_type":
    "id":3,
    "name":"admin"
  ,
  "order_status":
    "id":5,
    "name":"system"
  ,
  "user":null

]

我的php代码是:

foreach($orders as $order)
   echo $order->order_status_name; \\ I get error for this line;

现在我的问题是如何访问 order_status 中的名称字段?当我想访问总价时,我写了这段代码

$order->total_price

得到总价没有任何错误,但是什么时候写这段代码

$order->order_status->name

我得到这个错误:

Trying to get property 'name' of non-object

【问题讨论】:

订单好像没有order_status。 $order->order_status->name 是正确的语法,但如果$order->order_statusnull,则不能调用null->name。添加一些代码以确保 $order->order_status 存在;不要以为是这样。 订单属于 orderStatus,我明白了。我们在结果中看到了它。 @TsaiKoga 你收到的所有订单怎么样,有没有没有order_status的订单? 您的代码显示一个订单,但您调用->get(),可以得到多个订单。如果您只想获取具有订单状态的订单,则需要包含has('orderStatus'),否则,可能您的其中一个订单没有orderStatus 对象。此外,您的输出是JSON 翻译。在 php 中,这将是 $order->orderStatus->name 【参考方案1】:

问题是您的总价始终作为字段存在,但order_type 可能为空。

您可以在代码中使用三元来快速回退,例如:

!empty($order->orderStatus)?$order->orderStatus->name:null;

【讨论】:

可能是$order->orderStatus,而不是$order->order_status。查看with() 子句with('orderStatus')。代码中的输出是JSON 表示,它将关系转换为snake_case。另外,!empty() 是不必要的;可以是$order->orderStatus ? $order->orderStatus->name : '' 哦,不错不错,感谢您的指出。我的坏错过了关系

以上是关于如何访问laravel中的对象字段?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 如何访问相关对象其他关系

如何将 laravel 模型工厂创建方法返回的对象转换为包含模型字段的数组?

如何使laravel中的动态表单字段可填写

我可以通过 Laravel 5.1 中的自定义请求对象验证后恢复输入字段值吗?

如何在 Laravel 中读取 FormData 对象

如何在 Vue 和 Laravel 中使用 axios 上传图像文件和数据对象?