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

Laravel报错Trying to access array offset on value of type null,已执行命令仍未解决

Laravel视图错误:Trying to access array offset on value of type null 解决方案

错误原因

问题出在代码直接访问$item['advance']['advance_salary'],当$item['advance']本身为null时,无法对null值使用数组偏移访问,从而触发报错。原代码仅判断了advance_salary是否为null,未提前校验advance字段是否存在或非空。

解决方案

以下三种方法均可解决该问题,按需选择:

方法1:提前校验advance是否非空

修改视图代码,先确保$item['advance']存在再访问内部字段:

<td> {{ $item->salary }} </td>
@if(empty($item['advance']) || $item['advance']['advance_salary'] == NULL )
    <p>No Advance</p>
@else
    {{ $item['advance']['advance_salary'] }}
@endif
</td>
<td>
    @php
        $advance = !empty($item['advance']) ? $item['advance']['advance_salary'] : 0;
        $amount = $item->salary - $advance;
    @endphp
    <strong style="color: #fff;"> {{ round($amount) }} </strong>
 </td>

方法2:使用Laravel原生data_get辅助函数

data_get可安全访问嵌套数组/对象属性,不存在时返回指定默认值,代码更简洁:

<td> {{ $item->salary }} </td>
@if(data_get($item, 'advance.advance_salary') == NULL )
    <p>No Advance</p>
@else
    {{ data_get($item, 'advance.advance_salary') }}
@endif
</td>
<td>
    @php
        $advance = data_get($item, 'advance.advance_salary', 0);
        $amount = $item->salary - $advance;
    @endphp
    <strong style="color: #fff;"> {{ round($amount) }} </strong>
 </td>

方法3:使用PHP null合并运算符??

通过??快速处理null情况,设置默认值:

<td> {{ $item->salary }} </td>
@php
    $advanceSalary = $item['advance']['advance_salary'] ?? null;
@endphp
@if($advanceSalary == NULL )
    <p>No Advance</p>
@else
    {{ $advanceSalary }}
@endif
</td>
<td>
    @php
        $advance = $item['advance']['advance_salary'] ?? 0;
        $amount = $item->salary - $advance;
    @endphp
    <strong style="color: #fff;"> {{ round($amount) }} </strong>
 </td>

补充说明

之前执行的缓存清理命令无效,是因为问题并非缓存导致,而是代码逻辑未处理$item['advance']为null的边界场景。

内容的提问来源于stack exchange,提问作者Tariqul islam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:45:51