我已经构建了一个包含多个表和复杂关系的MySQL数据库,但是当我浏览steam文档时,特别是在构建模型阶段时,有一种创建表的方法(我的模型类将与之交互) )。
static func prepare(_ database: Database) throws {
try database.create("users") { users in
users.id()
users.string("name")
}
}
但是,我不想使用它,因为我已经拥有的表包含外键和类型,如DATETIME(我不知道如何在swift上下文中声明。)是否有用蒸汽链接我已构建的表格的方法吗?
答案 0 :(得分:1)
这是某个地方Vapor(或更正确的Fluent,这是Vapor的数据库级别)有点受限。
是的,您可以使用现有的表格。在prepare(_:)
方法中,您可以简单地将实现留空而不创建表。你也应该将revert(_:)
留空。
在init(node:in:)
初始化程序和makeNode(context:)
方法中,您需要在表格中的列名称和类型以及Swift模型中的属性类型之间进行映射。
答案 1 :(得分:0)
在模型对象类(此处为User)中,prepare
方法可以保持未实现,因为我们不需要从代码中显式创建表。所以应该像
static func prepare(_ database: Database) throws {
...
}
但是应该添加一个名为entity
的静态变量,它将在没有模型类的db中映射表名,如下所示
final class User: Model {
static let entity = "users"
...
}
最后,我们应该使用drop.preparations.append(User.self)
这样我们就可以使用具有复杂关系的数据库中的任何现有表来从Vapor中的模型对象进行映射。