正如标题所说:
设置 .unique(on:) 会影响 fluence/vapor 中的 .id 吗?
我有一个“用户”模式,它有一个 .id 并且也是 .unique(在:电子邮件上)。现在我注意到数据库中的用户条目具有不同的电子邮件地址但具有相同的 ID。我认为这不应该发生,因为 id 也是唯一的。
也许有人能给我答案。已经非常感谢了!
struct CreateUser: Migration {
func prepare(on database: Database) -> EventLoopFuture<Void> {
database.schema(User.schema)
.id()
.field("name", .string)
.field("email", .string, .required)
.unique(on: "email")
.create()
}
func revert(on database: Database) -> EventLoopFuture<Void> {
database.schema(User.schema)
.delete()
}
}
我能想到的唯一解释就是email和id组合起来形成主键,或者说取消了id的唯一性。
final class User: Model, Content {
static let schema = "users"
@ID var id: UUID?
@Field(key: "email") var email: String
@Field(key: "name") var name: String?
init() {}
init(id: UUID? = nil,
name: String?,
email: String
) {
self.id = id
self.name = name
self.email = email.lowercased()
}
}
您需要将模型中的 @ID 行更改为:
@ID(key: .id) var id: UUID?
我认为问题在于 Vapor 最终并没有使 Id 字段成为主要(因此也是唯一的)标识符。您可以通过查看数据库中的表结构来确认这一点。