在 typeorm 的实体级别有条件地实现关系

Implement relation conditionally at entity level in typeorm

我有一个案例需要实现 TypeORM 的 softDelete 特性。在我的实体中的某处(我们称之为 Lead),我有一个列映射到具有 OneToOne 关系的另一个实体(我们称之为 Customer)。

............ 

@OneToOne(type => Customer, {})
@JoinColumn()
customer: Customer;

..........

这里的问题是因为软删除不会从数据库中完全删除记录,每当我从 lead table 中删除任何记录时,我无法为相同的添加另一个潜在客户客户因为 OneToOne 关系。 在网上冲浪时,我得到了一些类似的独特约束场景的解决方案,比如使用:

但在这里我在映射关系时寻找某种 TypeORM 级别的解决方案。对于这种情况,最好的解决办法是什么?

TypeORM 中的一对一关系默认创建一个唯一的外键约束。虽然该行是来自潜在客户 table 的 soft-deleted,但 table 中仍然会有一个唯一值。因此,在为同一个客户插入另一个线索时,TypeORM 将抛出一个唯一约束错误。

此问题的解决方案是从关系中删除外键约束。现在,这将允许我们在 Lead table.

中插入相同 customerId 的数据

现在我们要确定的是:

  1. 在潜在客户 table 中插入值之前,检查是否已经存在未软删除的该 customerId 的另一个潜在客户。
  2. 我们还必须确保在从客户 table 中删除任何客户之前,他们的特定潜在客户是来自潜在客户 table 的 soft-deleted。

P.S:在某种程度上,这个解决方案是一个 hacky 解决方案。但是由于软删除不考虑外键约束引用,所以这是我目前找到的 suitable 方式。