我正在尝试在应用程序(Vapor 4)中设置育儿,虽然它可以实现,但我遇到了这个问题,或者至少是一个限制,导致在模型中使用的属性名称不太有意义。
Vapor 4 要求将 @ID 属性命名为 'id' (var id: ...),而在以前的版本中,属性名称是可定义的,因此名称更有意义。
例如 User 表:我们的用户数据使用 Username 作为唯一键(不是主键),因此 User 模型定义如下:
// 'Unique key for the record.'
@ID(custom: "sysid", generatedBy: .database)
var id: Int?
// Unique login name
@Field(key: "username")
var username: String?
// Password for this login.
@Field(key: "password")
var password: String
...
有意义且可读,并且在应用程序中使用模型的任何地方,开发人员都知道 Id 字段是 sysid 而用户名是用户名。
规则和配置文件表中的外键使用用户名作为外键(由于遗留原因)。改变它虽然是分贝和应用程序目前是不可能的。
自从最初的实现以来,我一直在阅读并意识到使用关系(而不是过滤器和连接)的好处。
要在 Vapor 4 中使用关系,我必须将模型定义更改为:
// 'Unique key for the record.'
@Field(key: "sysid")
var sysid: Int?
// Unique login name
@ID(key: "username")
var id: String?
// Password for this login.
@Field(key: "password")
var password: String
...
我的模型定义意义不大(尽管它确实有效):
当然,这意味着尽管代码 .username 现在需要更改为 .id ,但这远不那么不言自明。
在 Vapor 3 中,我们可以将 ID 属性名称定义为任何内容。如果 Fluent/Vapor 4 像以前的版本一样允许自定义属性名称,那就容易多了。
我想知道是否有人遇到过这个“问题”?或者有一个解决方法,允许模型继续使用有意义的名称,并且仍然允许育儿正常工作。
我以这个简单的用户数据为例,但肯定其他人使用不同/有意义的列名,让我..烦恼?
任何指导/想法将不胜感激谢谢