Oha*_*har 9 postgresql node.js typescript typeorm
嗨,朋友们,这是我的函数,它获取一个 id 数组,我想一次删除行而不是在循环中运行,并且找不到解决方案。将不胜感激帮助。
async remove(ids: DeleteEmployeeAnswerDTO): Promise<boolean> {
if (ids.employeeAnswersIds.length) {
for (const id of ids.employeeAnswersIds) {
await EmployeeAnswers.delete(id.id);
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
jac*_*son 11
如果您的表只有一ID列,那么您应该能够传递 s 数组ID:
await EmployeeAnswers.delete(ids.employeeAnswersIds);
Run Code Online (Sandbox Code Playgroud)
您还可以ID使用以下方式在 where 子句中指定多个 s In:
await EmployeeAnswers.delete({ id: In(ids.employeeAnswersIds) });
Run Code Online (Sandbox Code Playgroud)
但是,如果您处理具有复合主键的表(就像我的情况一样),以下示例可以为您提供解决方案。我对这个答案并不着迷,但这是我如何使用DeleteQueryBuilder(文档)克服这个问题的:
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35623 次 |
| 最近记录: |