系统维护时触发Trying to get property of non-object视图错误求助
解决「Trying to get property of non-object」错误的方案
看起来你在维护系统时遇到了典型的「非对象属性访问」错误,结合你提供的代码和场景,我帮你梳理下问题原因和解决步骤:
核心问题分析
这个错误的本质是:你在视图里尝试用对象语法(->)访问一个非对象的属性——要么是你的查询结果$saques不是预期的Eloquent集合/对象,要么是遍历的子元素是数组(你提到之前接口返回数组),甚至可能是查询结果为空导致后续代码访问了空值的属性。
具体修复步骤
1. 先调试查询结果的类型与内容
在你的视图代码里,查询完$saques后临时加一行调试代码,确认它的实际形态:
<?php // 临时调试,上线前务必删除 dd($saques); ?>
- 如果输出是数组:那你后续用
$saque->xxx的写法就会报错,要改成数组语法$saque['xxx'] - 如果输出是空集合/空值:那后续遍历或访问属性自然会出错,需要先判断数据是否存在再执行后续逻辑
- 如果输出是查询构建器对象:说明你忘记在查询末尾调用
get()或first()来获取实际结果集
2. 优化GET参数的处理逻辑
别直接用原生$_GET,用Laravel提供的安全方法处理参数:
@inject('Saque', 'App\Saque') <?php // 用Laravel的request方法获取查询参数,更安全规范 $stat = request()->query('status'); $saques = collect(); // 默认给空集合,避免后续报错 // 验证参数合法性 if (is_numeric($stat)) { // 记得调用get()获取结果集合 $saques = $Saque->where('status', $stat)->get(); } ?>
3. 遍历前先判断数据是否存在
在视图中遍历$saques之前,先做非空判断,避免空数据导致的错误:
- 如果
$saques是Eloquent集合(对象):
@if($saques->isNotEmpty()) @foreach($saques as $saque) {{-- 这里用对象语法访问属性 --}} <p>状态:{{ $saque->status }}</p> @endforeach @else <p>没有找到符合条件的提现记录</p> @endif
- 如果
$saques是数组:
@if(!empty($saques)) @foreach($saques as $saque) {{-- 改用数组语法访问属性 --}} <p>状态:{{ $saque['status'] }}</p> @endforeach @else <p>没有找到符合条件的提现记录</p> @endif
4. 检查模型与查询的正确性
- 确认
App\Saque模型的$fillable或$guarded配置正确,确保status字段允许被查询 - 确认查询语句末尾调用了
get()(获取集合)或first()(获取单个对象),否则$saques只是查询构建器对象,不是实际结果
内容的提问来源于stack exchange,提问作者Carlos Daniel Giovanella




