不使用查询生成器nodejs的typeorm关系搜索
typeorm search in relation without using query builder nodejs
我尝试使用 typeorm 搜索相关字段这是我的 UserEntity
@OneToOne(() => UserAuth, userAuth => userAuth.user, {
eager: true,
cascade: true,
onDelete: 'CASCADE',
})
@JoinColumn({name:'id'})
userAuth?: UserAuth;
我在 UserAuthEntity 中有
@PrimaryGeneratedColumn()
id!: number;
@Column()
username: string;
@OneToOne(() => UserEntity, user => user.UserAuth)
@JoinColumn({ name: 'user_id' })
user?: UserEntity;
数据库中的示例数据
id
用户名
1
测试用户
在我的查询中我使用
this.userRepository.find({
relations: [ 'userAuth' ],
where: {
userAuth: {
username: 'testUser'
}
}
}); //this one return null data
我总是得到空数据,但如果我将用户名更改为 id,我得到正确的数据
this.userRepository.find({
relations: [ 'userAuth' ],
where: {
userAuth: {
id: 1
}
}
}); // this query return data
如果我使用查询构建器,一切正常,但他们是否可以使这个查询正常工作?
看起来 find/findOne 不允许按嵌套关系属性进行过滤。
您应该改用 QueryBuilder
。
检查下面的示例代码:
const username = 'testUser';
await this.ormRepository
.createQueryBuilder("userEntity")
.innerJoinAndSelect("userEntity.userAuth", "userAuth")
.where("userAuth.username= :username", { username })
.getMany();
您可以在 link reference
中查看有关此问题的更多信息
我尝试使用 typeorm 搜索相关字段这是我的 UserEntity
@OneToOne(() => UserAuth, userAuth => userAuth.user, {
eager: true,
cascade: true,
onDelete: 'CASCADE',
})
@JoinColumn({name:'id'})
userAuth?: UserAuth;
我在 UserAuthEntity 中有
@PrimaryGeneratedColumn()
id!: number;
@Column()
username: string;
@OneToOne(() => UserEntity, user => user.UserAuth)
@JoinColumn({ name: 'user_id' })
user?: UserEntity;
数据库中的示例数据
id | 用户名 |
---|---|
1 | 测试用户 |
在我的查询中我使用
this.userRepository.find({
relations: [ 'userAuth' ],
where: {
userAuth: {
username: 'testUser'
}
}
}); //this one return null data
我总是得到空数据,但如果我将用户名更改为 id,我得到正确的数据
this.userRepository.find({
relations: [ 'userAuth' ],
where: {
userAuth: {
id: 1
}
}
}); // this query return data
如果我使用查询构建器,一切正常,但他们是否可以使这个查询正常工作?
看起来 find/findOne 不允许按嵌套关系属性进行过滤。
您应该改用 QueryBuilder
。
检查下面的示例代码:
const username = 'testUser';
await this.ormRepository
.createQueryBuilder("userEntity")
.innerJoinAndSelect("userEntity.userAuth", "userAuth")
.where("userAuth.username= :username", { username })
.getMany();
您可以在 link reference
中查看有关此问题的更多信息