You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.5返回多模型至视图时无法访问对象属性问题

问题原因与解决方法

你碰到这个Trying to get property of non-object报错的核心原因一目了然:你传给视图的$instrumentUnderEdit和$teamUnderEdit是JSON格式的字符串,而不是Eloquent模型对象或者数组!

为什么会这样?

你在getDetails()方法里调用了toJson(),把查询出来的模型直接转成了JSON字符串,然后把这两个字符串塞进数组返回。之后在details()方法里,只是把数组里的字符串原封不动取出来传给视图——在Blade模板里,你想用对象属性的方式->去访问一个字符串的“属性”,这显然行不通,字符串根本没有image这个属性,所以报错了。

解决方法(推荐第一种)

方法1:直接传递模型对象/数组(最佳实践)

修改你的getDetails()方法,不要提前转成JSON,直接返回模型实例或者模型转成的数组:

public function getDetails($id) {
    // ... 这里是你的查询逻辑,比如获取$instruments和$team
    // 直接返回模型对象
    return [$instruments, $team];
    // 如果你更习惯用数组,也可以转成数组后返回
    // return [$instruments->toArray(), $team->toArray()];
}

这样在details()方法里拿到的就是模型对象(或者关联数组),传到视图后,不管是用$instrumentUnderEdit->image(对象方式)还是$instrumentUnderEdit['image'](数组方式),都能正常访问属性。

方法2:如果必须传JSON字符串,在视图中转成对象/数组

如果因为某些业务限制,你必须在getDetails()里返回JSON字符串,那就在Blade模板里把JSON转成可操作的对象或数组:

@php
    // 转成对象
    $instrument = json_decode($instrumentUnderEdit);
    // 如果要转成关联数组,加第二个参数true
    // $instrument = json_decode($instrumentUnderEdit, true);
@endphp

<!-- 然后正常访问属性 -->
{{ $instrument->image }}
<!-- 如果是数组的话就用 {{ $instrument['image'] }} -->

小提醒

第一种方法是Laravel开发的常规操作,模型本身就支持直接传递给视图,Blade对模型对象的属性访问有很好的支持,完全没必要多做“转JSON再转回来”的无用功,既浪费性能又容易踩坑。

内容的提问来源于stack exchange,提问作者Carol.Kar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:29:47