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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 13:24:03