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

2021-05-23 10:38:56 +08:00
 tlerbao

三张表(用户表、部门表、中间表: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);
1075 次点击
所在节点    问与答
3 条回复
2kCS5c0b0ITXE5k2
2021-05-23 11:15:54 +08:00
连表查不就好了. 既然知道了.部门 ID
tlerbao
2021-05-23 11:53:56 +08:00
@emeab join? 我就想看看关联模型的关联查询有没有什么直接的方法
ferock
2021-05-23 13:08:25 +08:00
这种时候,拼接的 sql,越复杂越难控制,直接写 sql 不更好吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/778641

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX