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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:37:19