Laravel排班申请系统查看按钮始终跳转同一ID93如何解决
问题根因
你在控制器中只查询了当前用户第一条申请记录对应的排班数据,模板循环时所有查看链接用的都是这个固定的排班ID,所以点击任意记录都跳转到ID为93的页面。
你之前把查询改成get()报错,是因为get()返回的是模型集合,不能直接取id属性。
修复步骤
1. 先给申请模型加关联
在Solicitudes模型文件中添加和排班(Eventos)的一对一关联:
// app/Models/Solicitudes.php 路径根据你项目实际情况调整 public function evento() { return $this->hasOne(Eventos::class, 'solicitud_id'); }
2. 修改控制器查询逻辑
删掉原来单独查询单条申请、单条排班的冗余代码,查询申请列表时直接预加载关联的排班数据:
public function inicio() { if (Auth::guest()) { return redirect()->route("login"); } $config = Configuraciones::findOrFail(0); // 查申请列表同时预加载关联的排班,避免N+1查询问题 $solicitudes = Solicitudes::where('user_id', Auth::id()) ->orderByDesc('created_at') ->take(5) ->with('evento') ->get(); return view('solicitudes.inicio', compact('solicitudes', 'config'))->with($data); }
3. 修改Blade模板的跳转链接
把原来固定用$eventos->id的地方,改成循环中当前申请对应的排班ID即可:
<!-- 原来的旧链接 --> <!-- <a class="dropdown-item" href="/turno/{{ $eventos->id }}">查看</a> --> <!-- 替换为下方代码 --> <a class="dropdown-item" href="/turno/{{ optional($solicitud->evento)->id }}">查看</a>
这里加optional()是为了避免某条申请没有对应排班数据时页面报错,你也可以根据业务逻辑加判断,没有排班时隐藏查看按钮。
内容的提问来源于stack exchange,提问作者seonica
相关产品推荐
相关产品推荐

