1

我正在尝试使用 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]

编辑:

我已使用此示例进行预填充Platformhttps ://mihaelamj.github.io/Pre-populating%20a%20Database%20with%20Data%20in%20Vapor/

将字符串填充到表格中很容易,但尝试填充shared keyplatform我来说是一个挑战。

我意识到我需要 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

4

0 回答 0