【问题标题】:typeorm search in relation without using query builder nodejstypeorm 在不使用查询构建器 nodejs 的情况下进行相关搜索
【发布时间】:2021-06-28 07:35:29
【问题描述】:

我尝试使用 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 username
1 testUser

在我的查询中我使用

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

如果我使用查询生成器一切正常,但他们无论如何都可以使这个查询正常工作吗?

【问题讨论】:

  • 您可以将 userAuthRepo 与关系用户一起使用,我有时会遇到这种情况,也许这就是关系的问题,您可以使用这些相关表中的 id 以外的其他属性。
  • 你能给我举个例子吗@deko_39
  • this.userAuthRepo.find({username: 'testUser', 关系: ['user']}, )

标签: node.js database orm nestjs typeorm


【解决方案1】:

find/findOne 似乎不允许按嵌套关系属性进行过滤。

您应该改用QueryBuilder

查看下面的示例代码:

const username = 'testUser';

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

您可以在link reference 中查看有关此问题的更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2015-10-06
    • 2021-01-11
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多