评估唯一性时忽略软删除条目的数据库约束

Database constraints to ignore soft-deleted entries when evaluating uniqueness

我有一个 User 模型,用户可以使用它在我的 Vapor (Swift) 应用程序中创建帐户。
User 实现 Migration 协议如下:

static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
    return Database.create(self, on: conn) { (builder) in
        try addProperties(to: builder)
        builder.unique(on: \.email)
    }
}

现在,这工作得很好,但是如果用户(软)删除他们的帐户并尝试再次使用相同的电子邮件地址注册,他们不能,因为电子邮件已被使用。

如何告诉 builder 在评估唯一性时忽略已删除条目中的值?

您实际上无法告诉 builder 忽略已删除条目中的值,因为构建器只是将本机 mysql/postgres 约束添加到您的 table。

添加新用户时,您必须手动执行此操作,例如查询完整的 table,包括已删除的条目,然后从那里开始。