You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

系统维护时触发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

火山引擎 最新活动