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

Laravel多对多关联pivot表查询 视图无法显示课程名问题

问题排查

课程名无法渲染是代码存在多处语法、逻辑错误导致,逐一对应修正即可:

  1. 关联预加载名称错误:Employ模型中定义的多对多关联方法名为courses,控制器预加载时写的是course,关联未触发
  2. 预加载查询逻辑错误:闭包内直接覆盖了$query对象,且多对多关联必须查询关联双方的主键字段才能完成中间表匹配,仅查询course_name会导致关联匹配失败
  3. 变量名不匹配:控制器传入视图的数据集变量名为$datas,视图中循环使用的是$data
  4. 视图循环逻辑错误:内层遍历课程关联时,调用的是外层数据集的courses属性,没有取当前循环行的员工实例关联,同时单元格标签使用错误、未正常闭合
修正后代码

控制器部分

public function show()
{
    $datas = employ::with(['courses' => function ($query) {
        // 必须查询course表主键,用于中间表关联匹配
        $query->select('id', 'course_name');
    }])
    // 必须查询employ表主键,用于中间表关联匹配
    ->select('id', 'Full_name', 'salary', 'emp_no')
    ->get();
    
    return view('teacher.teacher_data', ['datas' => $datas]); 
}

视图部分

<table border="1">
   <tr>
     <th>Full name</th>
     <th>Emp no</th>
     <th>salary</th>
     <th>course</th>
   </tr>
   @foreach($datas as $item) 
     <tr>
       <td>{{$item->Full_name}}</td>
       <td>{{$item->emp_no}}</td>
       <td>{{$item->salary}}</td>
       <td>
        @foreach ($item->courses as $course)
          {{$course->course_name}}
        @endforeach 
       </td>
     </tr>
   @endforeach
</table>
补充说明

如果你的表主键不是默认的id,把上述代码里select中的id替换成你实际的主键字段名即可;如果一个员工对应多个课程,可以在循环输出课程名时加逗号、换行等分隔符,避免课程名挤在一起。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:24:16