我有一个数据库,其中包含一些复杂的关系映射并填充了大量数据。我的要求是我需要在 Swift-Vapor 服务器上使用这个数据库。
所以我创建了一个类似于数据库模式的模型对象(使用 Fluent 框架构造),以处理蒸气服务器和数据库之间的数据流。
当需要将数据库表(用户表)与模型(用户模型)链接时,我发现了这个方法,它应该在模型类中实现。
static func prepare(_ database: Database) throws {
try database.create("users") { users in
users.id()
users.string("name")
}
}
因为我不需要为已经存在的数据库定义架构,所以这个准备方法没有实现。
结果是我无法与 db 交互,对于任何操作,例如 userObj.save()
借助模型对象内的以下方法实现,我使用 Swift-Perfect Server 实现了同样的事情。这是MySQLStORM
在 Perfect的帮助下完成的。
// Map the model to the database table "user"
override open func table() -> String {
return "user"
}
我正在寻找的是Vapor->
是否有可用的这样的选项,以便我可以将模型对象映射到数据库表?
在 Slack 社区中讨论这个问题时得到了一个解决方案,试用并运行良好。
解决方案:在模型类(例如User
)中,该prepare
方法可以不实现,例如
static func prepare(_ database: Database) throws {
}
但是应该添加一个静态变量entity
,它将映射表名,例如
final class User: Model {
static let entity = "users"
...
}
最后,我们应该将模型添加到液滴准备阵列中,例如
// Let the User be your model object
drop.preparations.append(User.self)
这样我们就可以使用任何具有复杂关系的现有数据库或预先填充的数据表来映射到模型对象,而无需从模型对象构造表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句