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

Laravel带关联关系的查询结果如何按指定关联部门筛选?

问题根因

你定义的scopeDepartment方法中直接查询dept_no字段无法生效,是因为dept_no不属于employees主表的字段,而是存放在多对多关联的中间表dept_emp中,直接对主表查询该字段自然匹配不到结果。

正确实现方案

Laravel 中针对关联关系的存在性筛选,需要使用whereHas方法,修改你的scope代码如下:

public function scopeOfDepartment($query, $departmentNo)
{
    return $query->whereHas('departments', function ($subQuery) use ($departmentNo) {
        $subQuery->where('dept_no', $departmentNo);
    });
}

调用方式

控制器中直接链式调用该scope即可,预加载关联的逻辑不需要修改:

// 替换为实际要筛选的部门编号
$targetDeptNo = 'd001';
$employees = Employee::with('departments')
    ->ofDepartment($targetDeptNo)
    ->paginate(50);

可选优化:预加载结果同步筛选

如果你不需要返回员工关联的其他部门数据,只需要保留当前筛选的部门信息,可以同步给with方法增加筛选条件,减少返回的冗余数据:

$targetDeptNo = 'd001';
$employees = Employee::with(['departments' => function ($subQuery) use ($targetDeptNo) {
        $subQuery->where('dept_no', $targetDeptNo);
    }])
    ->ofDepartment($targetDeptNo)
    ->paginate(50);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:39:03