Laravel开发HR系统员工多文档上传仅能获取1个的问题咨询
解决方案
问题根因
当前仅展示单份文件的核心原因是视图代码中调用了$employee->espacedocs->first(),仅取出了关联文档的第一条数据,没有遍历全部关联文档。
操作步骤
1. 配置模型关联
首先确认两个模型的关联关系配置正确:
- 打开
User模型(路径通常为app/Models/User.php或旧版Laravel的app/User.php),添加一对多关联方法:
public function espacedocs() { return $this->hasMany(\App\Models\Espacedocs::class, 'user_id'); }
- 打开
Espacedocs模型,添加反向关联方法:
public function user() { return $this->belongsTo(\App\Models\User::class, 'user_id'); }
2. 优化控制器(可选,提升查询性能)
修改EmployeeController的index方法,预加载文档关联避免N+1查询问题:
public function index() { return view('admin.employee')->with([ 'employees' => User::with('espacedocs')->get(), 'schedules' => Schedule::all() ]); }
如果用到员工详情页show方法,同步修改为预加载:
public function show($id) { $user = User::with('espacedocs')->findOrFail($id); $employee = $user->employees->first(); return view('admin.employee')->with(['employee' => $employee , 'user' => $user]); }
3. 修改视图遍历全部文档
将原视图中展示单份文档的代码段:
@if(isset($employee->espacedocs->first()->doc_url)) <a href="{{asset('uploads/docs/'.$employee->espacedocs->first()->doc_url)}}"><i class="icon-download-alt"> </i> {{$employee->espacedocs->first()->nom_doc}} </a> @endif
替换为遍历所有关联文档的代码:
@forelse ($employee->espacedocs as $doc) <div style="margin-bottom: 8px;"> <a href="{{ asset('uploads/docs/'.$doc->doc_url) }}" target="_blank"> <i class="icon-download-alt"></i> {{ $doc->nom_doc }} </a> </div> @empty <p class="text-muted">暂无上传的关联文档</p> @endforelse
完成以上修改后即可展示对应员工的全部上传文档。
内容的提问来源于stack exchange,提问作者Imane Chbiki
相关产品推荐
相关产品推荐

