ThinkPHP 多对多关联如何条件查询?

发布于 2022-09-12 23:49:43 字数 919 浏览 12 评论 0

三张表(用户表、部门表、中间表:user_has_departments)
用户可以隶属多个部门,所以定义了多对多关系。
中间表:id,user_id,department_id

关联关系

    // 用户模型下定义
    public function departments()
    {
        return $this->belongsToMany(Department::class, 'user_has_departments', 'department_id', 'user_id');
    }
    
    // 部门模型相对定义
    public function user()
    {
        return $this->belongsToMany(Users::class,'user_has_departments', 'user_id', 'department_id');
    }

需求

根据传入的部门ID集合,查询出所属用户列表。
传入的部门ID如[2,5,6,7],所以是一次查询多个部门,ThinkPHP的多对多好像不支持hasWhere,所以不知道怎么查询,请大神解答。

我目前的做法(实现最终需求但感觉Low,所以来提问)

    // 直接Db查询中间表获得user_id集合
    $userIds = Db::name('user_has_departments')
            ->whereIn('department_id',[2,5,6,7])
            ->column('user_id');
    // 然后再从user表in查询用户(我这个是写在搜索器里的,所以返回的是$query)
    return $query->whereIn('id', $userIds);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文