我正在尝试使用 Vapor 3 和 Vapor fluent 预先填充表格。我是蒸汽新手
我正在尝试Sharedkeys
使用来自Platform
. 我已经设法查询Platform
。但是,我正在努力填充SharedKeys
所以每个platform
人都会有一个shared key
我在下面包含了一个示例,但我没有运气。
在这一行
let sharedKeys = platforms.map { platform in
我得到一个编译错误
Unable to infer complex closure return type: add explicit type to disambiguate
然后我意识到map
正在返回[T]
,无法找到创建Future<SharedKey>
而不是[SharedKey]
这是我的编码示例,请随时批评!
平台模型
struct Platform : Codable {
var id : Int?
/// Type of platform, i.e. iPhone, iPad, Android etc...
var platform : String
init(platform : String) {
self.platform = platform
}
}
extension Platform : PostgreSQLModel, Content {}
extension Platform : PostgreSQLMigration {
static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
return Database.create(self, on: conn) { builder in
try addProperties(to: builder)
builder.unique(on: \.platform)
}
}
}
共享密钥模型
final class SharedKey: Codable {
var id : Int?
/// platform
var platID : Platform.ID?
/// shared key
var key : String
init(key: String, platform : Platform) {
self.key = key
self.platID = platform.id
}
}
extension SharedKey : PostgreSQLModel, Content {}
extension SharedKey : PostgreSQLMigration {
static func prepare(on conn: PostgreSQLConnection) -> Future<Void> {
return Database.create(self, on: conn) { builder in
try addProperties(to: builder)
builder.unique(on: \.key)
}
}
}
试图填充sharedKey
let p = Platform.query(on: conn).all()
let keysFuture = p.flatMap(to: [SharedKey].self) { platforms in
let sharedKeys = platforms.map { platform in
let key = SharedKey(key: "<random key>", platform: platform)
return key.save(on: conn)
}
return sharedKeys
}
我期待的是变量keysFuture
类型Future<[SharedKey]>
不是[SharedKey]
编辑:
我已使用此示例进行预填充Platform
:
https ://mihaelamj.github.io/Pre-populating%20a%20Database%20with%20Data%20in%20Vapor/
将字符串填充到表格中很容易,但尝试填充shared key
对platform
我来说是一个挑战。
我意识到我需要 Sharedkeys 才能[EventLoopFuture<Void>]
更新以下内容:
let pp = Platform.query(on: conn).all()
let op = pp.map { platforms in
return platforms.map { p in
return SharedKey(key: "random", platform: p).create(on: conn).map(to: Void.self) { _ in return }
}
}
但是,这会返回,因为EventLoopFutrue<[EventLoopFutrue<Void>]>
有没有办法解开这个?
我只需要附加[EventLoopFutrue<Void>]
到futures
上面的链接(https://mihaelamj.github.io)