如何从现有数据库构建一个蒸汽应用程序?

时间:2017-01-04 19:11:50

标签: swift3 vapor

我已经构建了一个包含多个表和复杂关系的MySQL数据库,但是当我浏览steam文档时,特别是在构建模型阶段时,有一种创建表的方法(我的模型类将与之交互) )。

static func prepare(_ database: Database) throws {
    try database.create("users") { users in
        users.id()
        users.string("name")
    }
}

但是,我不想使用它,因为我已经拥有的表包含外键和类型,如DATETIME(我不知道如何在swift上下文中声明。)是否有用蒸汽链接我已构建的表格的方法吗?

2 个答案:

答案 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)

将模型添加到Droplet的准备数组中

这样我们就可以使用具有复杂关系的数据库中的任何现有表来从Vapor中的模型对象进行映射。