如何访问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_status
是null
,则不能调用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 模型工厂创建方法返回的对象转换为包含模型字段的数组?