3

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

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

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

4

2 回答 2

1

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

是的,您可以使用现有的表格。在您的prepare(_:)方法中,您可以简单地将实现留空,而无需创建表。你也应该revert(_:)留空。

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

于 2017-01-06T23:11:33.300 回答
1

在模型对象类(此处为 User)中,该prepare方法可以不实现,因为我们不需要从代码中显式创建表。所以应该像

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

但是应该添加一个名为的静态变量entity,它将在没有模型类的情况下映射 db 中的表名,如下所示

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

最后,我们应该将模型添加到液滴的准备数组中drop.preparations.append(User.self)

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

于 2017-03-13T09:33:48.590 回答