如何从 typeorm postgreSQL 中获取软删除的实体?

Posted

技术标签:

【中文标题】如何从 typeorm postgreSQL 中获取软删除的实体?【英文标题】:How can I get soft deleted entity from typeorm postgreSQL? 【发布时间】:2021-01-27 22:00:42 【问题描述】:

我正在尝试使用 typeorm find, findOne or query builder get/getMany 方法从 postgreSQL 数据库中获取软删除的文档,但它总是返回未定义的。有没有办法获得删除的价值?

根据文档,它应该只为deletedAt 设置时间戳,而且它确实有效,因为我可以使用查询生成器中的 update where 更新相同的记录。

【问题讨论】:

【参考方案1】:

我发现还有另一种解决方案。您还可以使用 querybuilders .withDeleted() 方法返回软删除的实体。

例子

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

【讨论】:

这太棒了!谢谢。在我需要的时候会帮助我,但我以后一定会记得的:)【参考方案2】:
const queryBuilder = await this.yourRepository.createQueryBuilder('entity');
queryBuilder.withDeleted();
queryBuilder.where(`entity.deleted_at IS NOT NULL`);

【讨论】:

【参考方案3】:

实际上指的是findOptions doc,您可以传递withDeleted 布尔值,它将检索软删除的行。

例如:

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

【讨论】:

【参考方案4】:

经过更多搜索,我发现唯一的解决方案是使用原始 sql 查询,因为它在查询块的typeorm docs 中显示。

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

此查询返回带有deletedAt 时间戳的值。

【讨论】:

这很奇怪。您提出的解决方案不是唯一的解决方案 是的,我已经提出了一个我自己找到的解决方案,但是一个月后更好的答案来了,我接受了@BunyamiN 的新解决方案。

以上是关于如何从 typeorm postgreSQL 中获取软删除的实体?的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL 与 TypeORM 错误“在 \"Sep\" 处或附近出现语法错误”

如何为 postgresql MATERIALIZED VIEW 创建 typeorm 实体

是否可以使用 typeorm 在 postgresql 中使用数字数组?

如何在 TypeORM 中查询数组

TypeORM postgresql 急切加载关系定义为惰性

如何使用 Typeorm 创建与 Postgres 的连接