【问题标题】:Link model object to existing database table in Vapor将模型对象链接到 Vapor 中的现有数据库表
【发布时间】:2017-07-31 21:52:33
【问题描述】:

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

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

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

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

因为我不需要为已经存在的数据库定义模式,所以这个准备方法没有实现。

结果是我无法与 db 进行任何操作,例如 userObj.save()

借助模型对象中的以下方法实现,我使用 Swift-Perfect Server 实现了相同的目标。这是在 Perfect 中的 MySQLStORM 帮助下完成的。

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

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

【问题讨论】:

    标签: mysql swift vapor perfect


    【解决方案1】:

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

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

    【讨论】:

    • 液滴准备阵列应该在哪里?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2019-03-24
    相关资源
    最近更新 更多