将模型对象链接到Vapor中的现有数据库表

时间:2017-03-10 14:07:11

标签: mysql swift vapor perfect

我有一个数据库,其中一些复杂的关系被映射并填充了大量数据。我的要求是我需要将此数据库与Swift-Vapor服务器一起使用。

这样我就创建了一个类似于数据库模式的模型对象(使用Fluent框架结构),以便处理Steam服务器和db之间的数据流。

当需要将数据库表(用户表)与模型(用户模型)链接起来时,我找到了这个方法,它应该在模型类中实现。

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

由于我不需要为现有的db定义模式,因此这个prepare方法刚刚未实现。

结果是我无法与db进行交互,无论是userObj.save()

等任何操作

我在Swift-Perfect Server中通过模型对象内部的以下方法实现获得了同样的功能。这是通过Perfect中的帮助MySQLStORM完成的。

  // Map the model to the database table "user"
  override open func table() -> String {
    return "user"
  }

我正在寻找的是-> Vapor 中是否有这样的选项,以便我可以将模型对象映射到数据库表?

1 个答案:

答案 0 :(得分:2)

在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)

这样我们就可以使用任何具有复杂关系的现有数据库或预先填充的数据表来映射模型对象,而无需从模型对象构造表。