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()
非常感谢!这对我帮助很大!很高兴它帮助了你:)