Nestjs/TypeORM - 如何实现自定义按列搜索

问题描述 投票:0回答:5

我正在使用 TypeORM 和 MySQL 来玩 NestJs。

我已经查看了文档,并且我已经在本地运行了基本的 CRUD 应用程序。 我已经通过 id 内置了搜索(通过存储库),但我还需要通过自定义列实现搜索。

例如我有这个实体:

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  username: string;

  @Column()
  first_name: string;

  @Column()
  last_Name: string;

  @Column()
  gender: string;
  

在我的存储库中,我有这些内置方法:

async findAll(): Promise<User[]> {
    return this.usersRepository.find();
  }

  findOne(id: string): Promise<User> {
    return this.usersRepository.findOne(id);
  }
  

正如预期的那样,它工作得很好。我需要另一个自定义搜索,这样我也可以通过用户名进行搜索,我怎样才能实现这一点? 我需要这样的东西:

findByUsername(username: string): Promise<User> {
    return this.usersRepository.findByUsername(username);
  }

我假设我必须实现自定义查询,但我不知道在哪里执行:(

node.js nestjs typeorm
5个回答
11
投票

这是更简单的解决方案:

findByUsername(username: string): Promise<User | undefined> {
    return this.usersRepository.findOne({ username }); 
}

2
投票

您可以使用此代码

findByName(user_name: string): Promise<User> {
    return this.usersRepository.findOne({ user_name }); 
}

0
投票

我通过使用 queryBuilder

成功实现了它

这就是我的函数现在的样子:

findByUsername(username: string): Promise<User | undefined> {
    const user = getRepository(User)
      .createQueryBuilder("user")
      .where("user.username = :username", { username: username })
      .getOne();

    return user;
  }

0
投票

我发现没有人使用 findOneBy,而它是为我工作的。 即使主题很旧,我可以添加替代方案吗:

 async getUserByName(username: string){
    return await this.userRepository.findOneBy({name: username });
}

了解更多信息https://typeorm.io/working-with-repository


-2
投票
const firstUser = await connection
    .getRepository(User)
    .createQueryBuilder("user")
    .where("user.id = :id", { id: 1 })
    .getOne();
© www.soinside.com 2019 - 2024. All rights reserved.