Hola amigos, esta es mi función, obtiene una serie de ID. Quiero borrar las filas de un solo golpe y no ejecutarlas en el ciclo, y no puedo encontrar una solución para eso. Agradecería ayuda.
async remove(ids: DeleteEmployeeAnswerDTO): Promise<boolean> { if (ids.employeeAnswersIds.length) { for (const id of ids.employeeAnswersIds) { await EmployeeAnswers.delete(id.id); } } return true; }Si su tabla tiene una sola columna de ID , entonces debería poder pasar una matriz de ID :
await EmployeeAnswers.delete(ids.employeeAnswersIds); También puede especificar múltiples ID en su cláusula where usando In :
await EmployeeAnswers.delete({ id: In(ids.employeeAnswersIds) }); Sin embargo, si trabaja con una tabla que tiene una clave primaria compuesta, como en mi caso, el siguiente ejemplo puede ser la solución para usted. No estoy loco por esta respuesta, pero así es como superé este problema usando 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; }Puede buscar varios registros y luego eliminar las entidades encontradas en una sola operación. Si no se encuentran una o más entidades, no se elimina nada.
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); }