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

Laravel如何通过外键关联获取指定Penyedia下所有Pekerjaan数据

问题根因

现有代码存在3处错误,导致无法正确查询关联数据:

  • 控制器查询逻辑错误:showpekerjaan方法中调用Penyedia::with('pekerjaans')->get()会查询所有Penyedia数据及关联,并非当前指定ID的单个Penyedia下的关联数据,额外写的$pekerjaans查询完全冗余
  • 路由模型绑定不匹配:跳转链接参数需要和路由、控制器方法参数名对齐,否则无法自动注入对应ID的Penyedia模型实例
  • 视图传参变量不匹配:目标视图循环使用的变量是$pekerjaan,但原控制器未传递对应名称的变量,会导致视图报错
修复方案

1. 修正路由定义

打开routes/web.php,确保对应路由参数名与控制器方法参数一致,触发Laravel隐式路由模型绑定:

Route::get('/nilaipekerjaan/{penyedia}', [AdminController::class, 'showpekerjaan']);

注意:路由参数必须命名为{penyedia},和控制器方法中Penyedia $penyedia的变量名完全对应,否则绑定失效。

2. 修正控制器方法

将原showpekerjaan方法替换为如下代码,逻辑和你在Tinker中执行的操作完全一致:

//获取指定Penyedia对应的Pekerjaan数据
public function showpekerjaan(Penyedia $penyedia){
    // 预加载当前Penyedia的关联Pekerjaan数据,避免N+1查询
    $penyedia->load('pekerjaans');
    // 取出关联数据赋值给视图需要的变量名
    $pekerjaan = $penyedia->pekerjaans;

    return view('admin.tabelnilai_pekerjaan', compact('penyedia', 'pekerjaan'));
}

原tabelnilai_penyedia方法逻辑正确,无需修改。

3. 视图可选优化

目标视图中企业名称列无需通过Pekerjaan模型反向查询关联,直接使用传入的$penyedia变量即可,减少冗余查询:

<td>{{$penyedia->nama}}</td>

其余视图代码无需调整,原有循环逻辑可正常渲染数据。

修复完成后,点击列表页的「Beri Penilaian」按钮,即可正确展示当前Penyedia下关联的所有Pekerjaan数据,效果和Tinker中查询结果完全一致。


内容的提问来源于stack exchange,提问作者YuPi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:57:25