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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:10:25