Swift 如何在模型中定义多个UUID

Swift 如何在模型中定义多个UUID,swift,vapor,Swift,Vapor,我正在使用vapor和fluent 我想定义一个如下所示的用户模型。 但我得到了错误“致命错误:顶层引发的错误:previousError(服务器:不允许表“用户”使用多个主键” 不能在一个模型中定义多个uuid吗 导入蒸汽 导入FluentPostgresDriver 最终类用户:模型、内容{ 静态let schema=“用户” @ID(自定义:“ID”) 变量id:Int? @字段(键:“电子邮件”) var电子邮件:String @字段(键:“密码”) var密码:String @ID(自

我正在使用vapor和fluent

我想定义一个如下所示的用户模型。 但我得到了错误“致命错误:顶层引发的错误:previousError(服务器:不允许表“用户”使用多个主键”

不能在一个模型中定义多个uuid吗

导入蒸汽
导入FluentPostgresDriver
最终类用户:模型、内容{
静态let schema=“用户”
@ID(自定义:“ID”)
变量id:Int?
@字段(键:“电子邮件”)
var电子邮件:String
@字段(键:“密码”)
var密码:String
@ID(自定义:“公共ID”)
var public_id:UUID?
init(){}
init(id:Int?=nil,email:String,password:String,public_id:UUID?=nil){
self.id=id
self.email=电子邮件
self.password=密码
self.public\u id=public\u id
}
}
struct CreateUser:迁移{
func prepare(关于数据库:database)->EventLoopFuture{
database.schema(“用户”)
.field(“id”、.int、.identifier(自动:true))
.field(“电子邮件”、.string)
.field(“密码”、.string)
.field(“public_id”,.uuid,?)
.create()
}
.....
}

不要将公共UUID标记为
@ID
,只需将其标记为另一个
@Field
(字符串类型是最简单的,但如果您想戴螺旋桨帽,也可以使用二进制[16字节]),并将其设置为必需的

在创建过程中,您必须实际调用UUID生成函数,但这应该足够简单


但是,为什么不让主键成为UUID,而不是有两个标识符呢?它在数据库中占用了更多的空间,但可能值得避免使用几个不同ID的头痛问题。

@ID
表示主键。每个表只能有一个主键。因此,将此字段标记为simple
@field
那么@F将在数据库端自动生成ield public_id?它不会自动生成(id属性也不会自动生成,它实际上是由Fluent为UUID而不是DB填写的)。您可以将初始值设定项更改为
public_id:UUID=UUID()
自动获取一个