如何从现有数据库构建 vapor 应用程序?

how to build a vapor app from an already existing database?

我已经构建了一个包含多个 table 和复杂关系的 MySQL 数据库,但是当我查看 vapor 文档时,具体来说,在构建模型阶段,有一个方法用于创建 table(我的模型 class 将与之交互)。

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

但是,我不想使用它,因为我已经拥有的 table 包含外键和像 DATETIME 这样的类型(我不知道如何在 swift上下文。)有没有办法 link 我已经构建的 tables 与蒸汽?

这是 Vapor(或者更准确地说是 Fluent,这是 Vapor 的数据库级别)有点受限的地方。

是的,您可以使用现有的 table。在您的 prepare(_:) 方法中,您可以简单地将实现留空而不创建 table。您还应该将 revert(_:) 留空。

在您的 init(node:in:) 初始化程序和 makeNode(context:) 方法中,您需要在 table 中的列名称和类型与 属性 类型之间进行映射 Swift型号。

在模型对象 class(这里是用户)中,prepare 方法可以不实现,因为我们不需要从代码中显式创建 table。所以应该像

static func prepare(_ database: Database) throws { 
   ...
}

但应该添加一个名为 entity 的静态变量,它将在没有模型 class 的数据库中映射 table 名称,如下所示

final class User: Model {
    static let entity = "users"
    ...
}

最后,我们应该使用 drop.preparations.append(User.self)

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

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