nestjs - 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 上中断
解决方案
您在实体中设置关系room
,要使其正常工作,您应该从room repository
const freeSocketServers = await this.roomRepository
.createQueryBuilder('room')
.leftJoinAndSelect('room.roomServer', 'room-server')
.getMany();
console.log('freeSocketServer', freeSocketServers);
或者你可以让它双向查看一对一
推荐阅读
- mapr - 在 Windows 10 上安装 mapr-client 时出现问题
- php - 为什么我的数据库在连接和包含时不能获取用户的表单信息?
- android - Android 分页库 java.lang.IllegalArgumentException:需要 MainThreadExecutor
- sql - 在 SQL Server 中使用联接的正确方法
- c++ - ARM 与旧的 glibc 交叉编译
- mongoose - 猫鼬虚拟计数字段: this.populate().execPopulate() 字段在访问时为空,除非首先在填充的文档上调用 .toJSON()
- label - 我想在标签中显示列表框项目的总量
- c# - 使用 MediaElement 在 UWP 中播放 UDP H.264 字节流
- python - 将多个 Python 子解释器嵌入到 C 程序中
- javascript - 使用服务器端处理的 AngularJS 数据表的计算列的事件