Laravel中view->with传参报错:Trying to get property of non-object
解决视图报错 "Trying to get property of non-object" 的问题
这个错误本质上是视图预期访问对象属性,但你实际传递的是关联数组,或者你的重构逻辑导致数组结构出现了非预期的空值/非对象元素。下面一步步帮你排查和解决:
第一步:先确认你重构后的$indicators结构
在控制器里加一行打印代码,先搞清楚你传递给视图的到底是什么:
$originalData = Indicator::all(); // 你的行转列重构代码 $indicators = ...; // 你的逻辑 dd($indicators); // 打印数组结构,看看每个元素是数组还是对象
比如如果输出是类似这样的关联数组:
[ ['id' => 1, 'name' => '用户活跃度', 'value' => 85], ['id' => 2, 'name' => '转化率', 'value' => 12] ]
那问题就出在视图的访问方式上。
两种解决方案,选适合你的场景
方案1:调整视图的访问语法(最简单)
如果你的$indicators是关联数组,视图里不能用对象属性的写法($indicator->name),要改成数组索引的写法:
把视图里的:
{{ $indicator->name }} {{ $indicator->value }}
改成:
{{ $indicator['name'] }} {{ $indicator['value'] }}
同时要确保重构后的数组每个元素都包含你要访问的键,避免出现Undefined index的次级错误。
方案2:把关联数组转换成对象(保持视图写法不变)
如果你习惯用对象属性的访问方式,不想改视图代码,可以把重构后的数组元素转换成标准对象:
// 用collect和map遍历转换每个数组元素为对象 $indicators = collect($yourReconstructedArray)->map(function ($item) { return (object) $item; }); // 或者如果是多维数组,嵌套转换: $indicators = collect($yourReconstructedArray)->map(function ($group) { return (object) array_map(function ($item) { return (object) $item; }, $group); });
转换后,视图里的$indicator->name写法就能正常工作了。
额外排查点:确保重构逻辑没有生成无效元素
如果上面的方法都没用,检查你的行转列逻辑:有没有出现某个元素是null、空字符串,或者不是数组/对象的情况?比如分组时某个分组没有数据,导致$indicators里混入了非预期值,遍历的时候就会触发报错。这种情况下要在重构逻辑里过滤掉无效元素,比如:
$indicators = array_filter($yourReconstructedArray, function ($item) { return !empty($item) && is_array($item); });
内容的提问来源于stack exchange,提问作者Andrew Boddy
相关产品推荐
相关产品推荐

