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

Laravel中如何从数据透视表取值?筛选同校用户代码优化求助

解决仅显示对应学校用户的查询问题

你的代码目前存在两个关键问题:

  • 先用User::all()取出所有用户后再做集合过滤,会造成不必要的性能浪费,应该直接在数据库层面完成筛选
  • where子句的字段名错误,需要指向用户与学校关联的中间表(数据透视表)中的school_id字段

以下是两种正确的实现方式:

方式一:使用Eloquent关联查询(推荐)

利用whereHas直接筛选关联了指定学校的用户,完全贴合Eloquent的关联设计:

$school_id = Auth::user()->schools[0]->id;
// 筛选出关联了指定school_id的用户
$users_in_school = User::whereHas('schools', function ($query) use ($school_id) {
    $query->where('school_id', $school_id);
})->get();

return $users_in_school;

方式二:直接关联中间表查询

如果你明确知道中间表的名称(比如截图对应的user_school表),可以直接通过联表查询实现:

$school_id = Auth::user()->schools[0]->id;
$users_in_school = User::join('user_school', 'users.id', '=', 'user_school.user_id')
    ->where('user_school.school_id', $school_id)
    ->select('users.*') // 仅选择用户表字段,避免字段重复
    ->get();

return $users_in_school;

两种方式都能精准筛选出对应学校的用户,其中方式一更符合Laravel的Eloquent用法,且代码可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:11:16