Laravel 9中Staff关联Payroll读取属性时出现空对象报错问题
解决Laravel关联模型属性访问报错问题
当员工没有关联的薪资记录时,$item->payroll会返回null,直接访问basic_salary就会抛出Attempt to read property "basic_salary" on null错误,以下是几种可行的解决方式:
使用PHP 8+可选链操作符
这是最简洁的写法,当payroll为null时会直接返回null,不会触发错误:<td>{{ $item->payroll?->basic_salary }}</td>使用Laravel的
optional()辅助函数
兼容PHP 8以下版本,效果和可选链一致:<td>{{ optional($item->payroll)->basic_salary }}</td>Blade模板中添加条件判断
可以给无薪资记录的员工设置默认显示值(比如0或“无记录”):<td> @if($item->payroll) {{ $item->payroll->basic_salary }} @else 0 @endif </td>在关联定义中设置默认模型
修改Staff模型的payroll关联,添加withDefault()方法,这样即使没有关联记录,也会返回一个包含默认属性的Payroll实例:public function payroll(){ return $this->hasOne(Payroll::class)->withDefault([ 'basic_salary' => 0 // 可按需添加其他需要默认值的字段 ]); }之后直接使用
{{ $item->payroll->basic_salary }}即可,无记录时会显示预设的默认值。
内容的提问来源于stack exchange,提问作者Abdulsamad Mohammed
相关产品推荐
相关产品推荐

