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
相关产品推荐
相关产品推荐

