ThinkPHP 多对多关联如何条件查询?
表
三张表(用户表、部门表、中间表: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);
@lyxxxh 小哥,这样不对,这是查询出部门数据并管理那预载入他的user哈。我要的是[2,5,6,7]部门里的所有用户ID
@aichen521001 首先说学到了新知识小哥,但是还是不太对,不太明白。
我是要在thinkphp的搜索器里写:
做过类似的