我有两个实体:User
和Organisation
。这些实体彼此之间具有多对多关系。(一个用户可以属于多个组织,一个组织有多个用户。)
我有一个端点,/organisation/:id/members
此端点应仅返回属于的组织的用户:id
。
我创建了一个查询,如下所示:
const members = await getConnection()
.createQueryBuilder(Organisation, 'org')
.where('org.id = :orgId', { orgId })
.innerJoinAndSelect('org.members', 'member')
.select('member')
.getMany();
这将返回一个空数组,除非getRawMany
使用时。然后返回以下内容:
[
{
"member_id": 1,
"member_email": "[email protected]",
"member_firstName": "John",
"member_middleName": "",
"member_lastName": "Doe"
}
]
我想知道如何getMany()
返回User
实体。
更新:我有以下示例,它可以工作。但是,它要求用户为joinTable命名。
await getConnection()
.createQueryBuilder(User, 'user')
.innerJoinAndSelect(
'organisation_members',
'member',
'member.userId = user.id',
)
.where('member.organisationId = :orgId', { orgId })
.getMany();
新答案:我的实体设置不正确。我这样指定了ManyToMany关系(不正确!):
@ManyToMany(type => User)
members: User[];
因为这是双向关系,所以我必须指定用户在哪个领域与组织有关系:
@ManyToMany(
type => User,
user => user.organisations,
)
members: User[];
我的用户实体具有:
@ManyToMany(
type => Organisation,
org => org.members,
)
organisations: Organisation[];
使用TypeORM查询关系构建器获取所有成员。
再次更新:
return getConnection()
.createQueryBuilder()
.relation(Organisation, 'members')
.of(orgId)
.loadMany();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句