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

时间:2020-07-30 09:31:26

标签: node.js nestjs typeorm

我正在使用TypeORM和MySQL一起玩NestJs。

我已通过documentation,并制作了基本的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);
  }

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

4 个答案:

答案 0 :(得分:1)

这是更简单的解决方案:

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

答案 1 :(得分:1)

您可以使用此代码

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

答案 2 :(得分:0)

我设法通过使用queryBuilder

实现了这一目标

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

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

    return user;
  }

答案 3 :(得分:-1)

const firstUser = await connection
    .getRepository(User)
    .createQueryBuilder("user")
    .where("user.id = :id", { id: 1 })
    .getOne();