Mysql 键入如何获得关系的关系

Mysql 键入如何获得关系的关系,mysql,typeorm,Mysql,Typeorm,我正在使用entitymanager.findOne方法获取对象聊天室实体。聊天室实体有一个变量messages,它是一个OneToMany-manytone关系。我没有问题选择,但我如何获得发送消息的用户。它是MessageEntity上具有一对一关系的变量 所以基本上我想选择一个房间和它的所有信息。但是,所有消息的值也应该位于用户的上。 我选择的房间如下: this.entityManager.findOne(ChatRoomEntity, {where: {id: roomToJoin.i

我正在使用
entitymanager.findOne
方法获取对象聊天室实体。聊天室实体有一个变量
messages
,它是一个OneToMany-manytone关系。我没有问题选择,但我如何获得发送消息的用户。它是MessageEntity上具有一对一关系的变量

所以基本上我想选择一个房间和它的所有信息。但是,所有消息的值也应该位于用户的
上。
我选择的房间如下:

this.entityManager.findOne(ChatRoomEntity, {where: {id: roomToJoin.id}, relations: ['activeUsers', 'messages']}).then(roomEntity => {
// some code
}
this.entityManager.findOne(ChatRoomEntity, {
        where: {id: roomToJoin.id},
        relations: ['activeUsers', 'messages', 'messages.fromUser'],
      }).then(roomEntity => {
...
以下是我的实体:

用户实体


@Entity()
export class UserEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @CreateDateColumn()
  registrationDate: Date;

  @ManyToMany(type => ChatRoomEntity, room => room.activeUsers, {cascade: true})
  @JoinTable()
  activeChatRooms: ChatRoomEntity[];

  @OneToMany(type => ChatRoomMessageEntity, msg => msg.fromUser)
  chatRoomMessages: ChatRoomMessageEntity[];
}

聊天室实体

@Entity()
export class ChatRoomEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column('varchar', {nullable: true})
  title: string;

  @OneToMany(type => ChatRoomMessageEntity, chatrmsg => chatrmsg.chatRoom)
  messages: ChatRoomMessageEntity[];

  @ManyToMany(type => UserEntity, user => user.activeChatRooms)
  activeUsers: UserEntity[];

}
聊天室消息实体

@Entity()
export class ChatRoomMessageEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column('varchar', {nullable: true})
  message: string;

  @CreateDateColumn()
  creationDate: Date;

  @ManyToOne(type => UserEntity, user => user.chatRoomMessages)
  fromUser: UserEntity;

  @ManyToOne(type => ChatRoomEntity, chatRoom => chatRoom.messages)
  chatRoom: ChatRoomEntity;

}

我们可以使用
关系
数组本身中的
'relation.subrelation'
加载子关系,如下所示:

this.entityManager.findOne(ChatRoomEntity, {where: {id: roomToJoin.id}, relations: ['activeUsers', 'messages']}).then(roomEntity => {
// some code
}
this.entityManager.findOne(ChatRoomEntity, {
        where: {id: roomToJoin.id},
        relations: ['activeUsers', 'messages', 'messages.fromUser'],
      }).then(roomEntity => {
...
关系:['relation1','relation2','relation2.subrelation1']

因此,对于您的情况,您可以简单地执行以下操作,而不是使用join:

this.entityManager.findOne(ChatRoomEntity, {where: {id: roomToJoin.id}, relations: ['activeUsers', 'messages']}).then(roomEntity => {
// some code
}
this.entityManager.findOne(ChatRoomEntity, {
        where: {id: roomToJoin.id},
        relations: ['activeUsers', 'messages', 'messages.fromUser'],
      }).then(roomEntity => {
...
这在此处指定:

使用QueryBuilder
wait-getRepository(实体)
.createQueryBuilder(“用户”)
.leftJoinAndSelect('user.photo','photo'))
.leftJoinAndSelect('photo.photometa','photometa')
.getMany()

非常感谢!这对我帮助很大!很高兴它帮助了你:)