如何删除多行类型-PostgreSQL&node.js(类型脚本)

vbopmzt1  于 2022-10-15  发布在  PostgreSQL
关注(0)|答案(3)|浏览(119)

嗨,朋友们,这是我的函数,它获得一组ID,我想要一次擦除行,而不是在循环中运行,但找不到解决方案。都会感激你的帮助。

async remove(ids: DeleteEmployeeAnswerDTO): Promise<boolean> {
        if (ids.employeeAnswersIds.length) {
            for (const id of ids.employeeAnswersIds) {
                await EmployeeAnswers.delete(id.id);
            }
        }
        return true;
    }
vcudknz3

vcudknz31#

如果您的表只有一个ID列,那么您应该能够传递一个ID s数组:

await EmployeeAnswers.delete(ids.employeeAnswersIds);

您还可以在WHERE子句中使用In指定多个ID

await EmployeeAnswers.delete({ id: In(ids.employeeAnswersIds) });

但是,如果您处理一个具有复合主键的表,就像我的例子一样,下面的示例可以为您提供解决方案。我对这个答案并不着迷,但以下是我如何使用DeleteQueryBuilder(docs)克服这个问题:

async remove(ids: DeleteEmployeeAnswerDTO): Promise<boolean> {
  if (ids.employeeAnswersIds.length) {
    const deleteQueryBuilder = EmployeeAnswer.createQueryBuilder().delete()

    const idClauses = ids.map((_, index) => `ID = :id${index}`)
    const idClauseVariables = ids.reduce((value: any, id, index) => {
      value[`id${index}`] = id
      return value
    }, {})

    await deleteQueryBuilder.where(idClauses.join(' OR '), idClauseVariables).execute()
  }
  return true;
}
fv2wmkja

fv2wmkja2#

您可以搜索多个记录,然后删除在单个操作中找到的实体。如果未找到一个或多个实体,则不会删除任何内容。

async removeMany(ids: string[]) {
    const entities = await this.entityRepository.findByIds(ids);
    if (!entities) {
      throw new NotFoundException(`Some Entities not found, no changes applied!`);
    }
    return this.entityRepository.remove(entities);
  }
z31licg0

z31licg03#

使用“Clear”方法清除表中记录的所有数据!

async deleteProducts() {
  await this.productRepository.clear();
  return {
    message: MESSAGE.PRODUCTS_REMOVED
  };
}

相关问题