Link Vapor 中现有数据库 table 的模型对象
Link model object to existing database table in Vapor
我有一个数据库,其中映射了一些复杂的关系并填充了大量数据。我的要求是我需要将此数据库与 Swift-Vapor 服务器一起使用。
所以我创建了一个类似于数据库模式的模型对象(使用 Fluent 框架构造),以处理 vapor 服务器和数据库之间的数据流。
当涉及到 link 数据库 table(users table) 与模型(用户模型)的时候,我找到了这个方法,它应该在模型内部实现 class.
static func prepare(_ database: Database) throws {
try database.create("users") { users in
users.id()
users.string("name")
}
}
因为我不需要为已经存在的数据库定义模式,所以这个准备方法没有实现。
结果是我无法与数据库交互,无法进行任何操作,例如 userObj.save()
我在 Swift-Perfect Server 中借助模型对象中的以下方法实现实现了同样的事情。这是在 Perfect.
的帮助下完成的 MySQLStORM
// Map the model to the database table "user"
override open func table() -> String {
return "user"
}
我正在寻找的是 ->
Vapor 中是否有类似的选项,以便我可以将模型对象映射到数据库 table?
在 Slack 社区中讨论这个问题时得到了解决方案,经过试用,效果很好。
解法:
在模型 class(比如 User
)中,prepare
方法可以保留未实现,例如
static func prepare(_ database: Database) throws {
}
但是应该添加一个静态变量 entity
,它将映射 table 名称,例如
final class User: Model {
static let entity = "users"
...
}
最后,我们应该将模型添加到液滴准备数组中,例如
// Let the User be your model object
drop.preparations.append(User.self)
这样我们就可以使用任何具有复杂关系或预填充数据 tables 的现有数据库与模型对象进行映射,而无需从模型对象构造 tables。
我有一个数据库,其中映射了一些复杂的关系并填充了大量数据。我的要求是我需要将此数据库与 Swift-Vapor 服务器一起使用。
所以我创建了一个类似于数据库模式的模型对象(使用 Fluent 框架构造),以处理 vapor 服务器和数据库之间的数据流。
当涉及到 link 数据库 table(users table) 与模型(用户模型)的时候,我找到了这个方法,它应该在模型内部实现 class.
static func prepare(_ database: Database) throws {
try database.create("users") { users in
users.id()
users.string("name")
}
}
因为我不需要为已经存在的数据库定义模式,所以这个准备方法没有实现。
结果是我无法与数据库交互,无法进行任何操作,例如 userObj.save()
我在 Swift-Perfect Server 中借助模型对象中的以下方法实现实现了同样的事情。这是在 Perfect.
的帮助下完成的MySQLStORM
// Map the model to the database table "user"
override open func table() -> String {
return "user"
}
我正在寻找的是 ->
Vapor 中是否有类似的选项,以便我可以将模型对象映射到数据库 table?
在 Slack 社区中讨论这个问题时得到了解决方案,经过试用,效果很好。
解法:
在模型 class(比如 User
)中,prepare
方法可以保留未实现,例如
static func prepare(_ database: Database) throws {
}
但是应该添加一个静态变量 entity
,它将映射 table 名称,例如
final class User: Model {
static let entity = "users"
...
}
最后,我们应该将模型添加到液滴准备数组中,例如
// Let the User be your model object
drop.preparations.append(User.self)
这样我们就可以使用任何具有复杂关系或预填充数据 tables 的现有数据库与模型对象进行映射,而无需从模型对象构造 tables。