【问题标题】:Optional parameter in TypeORM queryBuilderTypeORM queryBuilder 中的可选参数
【发布时间】:2020-10-24 04:21:45
【问题描述】:

createQueryBuilder中是否可以使用可选参数?

例如,我有这个代码:

let users = await this.conn
  .getRepository(UserEntity)
  .createQueryBuilder("user")
  .where("user.firstName LIKE :search", { search: dto.search })
  .getMany();

我的可选参数是search,我只想在dto.search不为空时启动子句.where,但当他为空时应该跳过这个函数(where)并转到getMany

有人知道怎么做吗?

【问题讨论】:

    标签: javascript sql typescript nestjs typeorm


    【解决方案1】:
    const query = this.conn
      .getRepository(UserEntity)
      .createQueryBuilder("user");
    
    // Optionally add where condition
    if(dto.search){
      query.where("user.firstName LIKE :search", { search: dto.search })
    }
    // run query
    let users = await query.getMany();
    

    请注意会导致 if 语句出错的虚假值。

    【讨论】:

      【解决方案2】:

      试试这个:

      let users = await this.conn.getRepository(UserEntity)
        .createQueryBuilder('user')
        .where(search !== null 
          ? 'user.firstName LIKE :search'
          : 'TRUE', { search: dto.search })
        .getMany();
      

      或者不使用where TRUE 的另一种方法是:

      let users = this.conn.getRepository(UserEntity)
        .createQueryBuilder('user');
      users = search !== null 
        ? users.where('user.firstName LIKE :search',{ search: dto.search })
        : users
      users = await users.getMany();
      

      【讨论】:

      • 小心这部分search !== null。它不会考虑 dto.search 未定义或具有零长度字符串值的情况。这可能会导致查询结果不准确。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 2023-03-04
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多