How can I get soft deleted entity from typeorm postgreSQL?

Viewed 21291

I am trying to get soft deleted doc from postgreSQL database using typeorm find, findOne or query builder get/getMany methods, but it always return undefined. Is there a way to get deleted value?

By the docs it should only set a timestamp for deletedAt, and it definitely works, because I can update same record using update where from query builder.

5 Answers

I found out there is another solution. You can use the querybuilders .withDeleted() method to also return soft deleted entities.

Example

 const query = await this.manager
        .getRepository(FolderEntity)
        .withDeleted() 
        .createQueryBuilder('folder')
        .leftJoinAndSelect('folder.subStatus', 'status')
        .getMany()

Actually referring to the findOptions doc you can pass the withDeleted boolean that will retrieve the soft deleted rows.

for example:

const result = await this.repo.find({ where: { id }, withDeleted: true })

After more searching I found that only solution is to use raw sql query for that as it is shown in typeorm docs at the query block.

const deletedEntity = await connection
    .getRepository(Entity)
    .query(`SELECT * FROM Entity where id = '${deletedEntityId}'`)

This query returns values with deletedAt timestamp.

const queryBuilder = await this.yourRepository.createQueryBuilder('entity');
queryBuilder.withDeleted();
queryBuilder.where(`entity.deleted_at IS NOT NULL`)};
await getManager().transaction(async (em) => {
    await em.update(Faqs, { id }, { updatedAt: userId });
    await em.softDelete(Faqs, id);
});
Related