首页 > 解决方案 > typeorm 在不使用查询构建器 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

如果我使用查询生成器,每一项都可以正常工作,但是他们是否可以让这个查询正常工作?

标签: node.jsdatabaseormnestjstypeorm

解决方案


看起来 find/findOne 不允许通过嵌套关系属性进行过滤。

你应该QueryBuilder改用。

检查下面的示例代码:

const username = 'testUser';

await this.ormRepository
    .createQueryBuilder("userEntity")
    .innerJoinAndSelect("userEntity.userAuth", "userAuth")
    .where("userAuth.username= :username", { username })
    .getMany();

您可以在此链接参考中查看有关此问题的更多信息


推荐阅读