Laravel8使用barryvdh/laravel-dompdf传id打印时报Attempt to read property "name" on bool错误
报错原因
Attempt to read property "name" on bool
这个报错的核心诱因是变量类型不匹配:
- 不传ID打印所有员工时,
Employees::all()返回的是员工模型集合,视图@foreach遍历的是员工对象列表,可正常读取属性 - 传入单个ID时,
Employees::find($id)返回的是单个员工模型实例(查询不到时返回null),此时用@foreach遍历单个模型实例,实际会遍历模型的属性值而非员工对象列表,访问属性时自然触发报错
另外你提到不传ID可正常运行,但当前路由定义的{id}是必填参数,本身也存在逻辑冲突。
修复步骤
1. 修正路由,将ID设为可选参数
将路由代码修改为:
Route::get('/print/{id?}', ['App\Http\Livewire\EmployeesTable', 'print'])->name('livewire.employees-table.print');
{id?} 表示该参数可选,兼容传/不传ID两种场景。
2. 调整打印方法逻辑,保证返回值始终为集合
修改print方法代码,不管是否传ID,$employees变量都返回集合类型,无需改动视图逻辑:
public function print($id = null){ // 传ID查询对应员工,套入集合;不传ID查询所有员工 $employees = $id ? Employees::where('id', $id)->get() : Employees::all(); // 可选:添加ID不存在的异常处理 if ($id && $employees->isEmpty()) { abort(404, '对应员工记录不存在'); } $teams= Team::all(); $pdf = PDF::loadView('employees.payslip', compact('teams', 'employees')); return $pdf->download('invoice.pdf'); }
3. 修复视图语法错误
你提供的视图代码里有两处语法错误,需要修正:
// 原错误写法 {$team->suburb}} {$team->phone}} // 修正为 {{$team->suburb}} {{$team->phone}}
内容的提问来源于stack exchange,提问作者user14650808
相关产品推荐
相关产品推荐

