Tim*_*sch 3 node.js typescript typeorm
我有两个实体: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();
Run Code Online (Sandbox Code Playgroud)
这将返回一个空数组,除非getRawMany使用。然后它返回以下内容:
[
{
"member_id": 1,
"member_email": "example@example.com",
"member_firstName": "John",
"member_middleName": "",
"member_lastName": "Doe"
}
]
Run Code Online (Sandbox Code Playgroud)
我想知道如何getMany()返回User实体。
更新: 我有以下示例,它确实有效。但是,它要求用户为 joinTable 指定名称。
await getConnection()
.createQueryBuilder(User, 'user')
.innerJoinAndSelect(
'organisation_members',
'member',
'member.userId = user.id',
)
.where('member.organisationId = :orgId', { orgId })
.getMany();
Run Code Online (Sandbox Code Playgroud)
新答案: 我的实体设置不正确。我像这样指定了我的 ManyToMany 关系(不正确!):
@ManyToMany(type => User)
members: User[];
Run Code Online (Sandbox Code Playgroud)
因为这是双向关系,所以我必须指定用户在哪个字段与组织有关系:
@ManyToMany(
type => User,
user => user.organisations,
)
members: User[];
Run Code Online (Sandbox Code Playgroud)
我的用户实体有:
@ManyToMany(
type => Organisation,
org => org.members,
)
organisations: Organisation[];
Run Code Online (Sandbox Code Playgroud)
使用 TypeORM 查询关系生成器获取所有成员。
再次更新:
return getConnection()
.createQueryBuilder()
.relation(Organisation, 'members')
.of(orgId)
.loadMany();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5833 次 |
| 最近记录: |