Laravel多对多关联下根据specialitie_id获取中间表results数据
解决方案
你的问题出在查询条件的定位上——之前的代码是筛选user.id = 5的用户数据,而不是你需要的specialitie_id = 5的关联结果。以下是几种可行的解决方式:
方式1:从Speciality模型反向查询
首先确保Speciality模型中定义了与User的反向多对多关联:
public function users() { return $this->belongsToMany(User::class, 'results', 'specialitie_id', 'user_id')->withPivot('result', 'color'); }
然后通过specialitie_id查询对应的关联数据:
// 获取ID为5的Speciality及其关联的用户和results表的附加字段 $speciality = Speciality::with('users')->find(5); // 提取所有关联的用户及对应的results数据 $relatedResults = $speciality->users;
方式2:直接查询中间表(推荐如果需要原始results数据)
如果你创建了Result模型(对应results表),可以直接查询该表:
// 获取specialitie_id为5的所有results记录 $results = Result::where('specialitie_id', 5)->get(); // 若同时需要关联的用户和Speciality信息,可预加载关联 $results = Result::with(['user', 'speciality'])->where('specialitie_id', 5)->get();
方式3:从User模型过滤关联的Speciality
如果你需要获取所有关联了specialitie_id=5的用户,同时仅加载该Speciality的关联数据:
$users = User::whereHas('specialities', function ($query) { $query->where('specialitie_id', 5); })->with(['specialities' => function ($query) { $query->where('specialitie_id', 5); }])->get();
内容的提问来源于stack exchange,提问作者Benish Farooq
相关产品推荐
相关产品推荐

