首页 > 解决方案 > Typeorm oneToOne 关系

问题描述

嗨,我在“房间”和“房间服务器”之间有关系

房间服务器:

@Entity({ name: 'room-servers' })
export class RoomServer {
  @PrimaryGeneratedColumn()
  id: number;

  @CreateDateColumn()
  createdAt: Date;

  @UpdateDateColumn()
  updatedAt: Date;
}

房间:

@Entity({ name: 'rooms' })
export class Room {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ default: '' })
  name: string;

  @Column({ nullable: true })
  description: string;


  @Column({ default: 'New' })
  status: string;

  @OneToOne(() => RoomServer, { nullable: false })
  @JoinColumn()
  roomServer: RoomServer;
}

当我输入 sql 查询

select * from "room-servers" rm left join rooms r on rm.id = r."roomServerId";

它返回结果(我在数据库中拥有的 3 个服务器)

但是当我尝试使用 queryBuilder 查看结果时:

    const freeSocketServers = await this.roomServerRepository
      .createQueryBuilder('room-servers')
      .leftJoinAndSelect('room-servers.id', 'roomServerId')
      .getMany();

    console.log('freeSocketServer', freeSocketServers);

它什么也不返回,我看不到console.log,它在.leftJoinAndSelect 上中断

标签: nestjstypeorm

解决方案


您在实体中设置关系room,要使其正常工作,您应该从room repository

 const freeSocketServers = await this.roomRepository
  .createQueryBuilder('room')
  .leftJoinAndSelect('room.roomServer', 'room-server')
  .getMany();

console.log('freeSocketServer', freeSocketServers);

或者你可以让它双向查看一对一


推荐阅读