【问题标题】:Upgrading to Vapor 4: how to create a model and returning it升级到 Vapor 4:如何创建模型并返回它
【发布时间】:2020-08-20 14:15:00
【问题描述】:

在我的旧 Vapor 3 代码中,我正在创建这样的模型:

address.create(on: conn).flatMap { savedAddress in
    // do something with saved address
}

在 Vapor 4 文档的帮助下,我现在将 db 传递给 create 函数而不是连接。问题是,似乎 flatMap 返回 Void,因为当我尝试访问 savedAddress 时出现以下错误:“元组类型 'Void' 的值没有成员......”。

我应该如何重写这个?

【问题讨论】:

  • 嘿,你可以在 Discord 中找到我 iMike#3049,我会帮助你迁移到 Vapor 4
  • 由于 Fluent4 在创建新记录时返回 Void,解决方法是提前将 id 设置为新记录,然后通过 id 从数据库中检索该记录。
  • 这听起来像是倒退了一步,这在 v3 中要容易得多。真的没有更好的解决方案吗?
  • 如果您更喜欢纯 SQL,那么我可以建议 Bridges github.com/SwifQL/Bridges
  • 我想我会等几天升级服务器,直到有官方的 fluent 升级指南。如果我仍然有问题,我会接受你的提议来帮助我。非常感谢你。

标签: vapor vapor-fluent


【解决方案1】:

因为 Fluent 4 中的所有模型都必须是类,所以您可以依靠引用语义来做您想做的事情(这就是为什么 create(on:) 返回 EventLoopFuture<Void>。所以在您的示例中,您可以使用而不是 savedAddress address 作为已保存的模型。保存后,Fluent 将在 address 对象上设置模型的 ID 属性,然后您可以在 flatMap 闭包中使用 address.requireID() 检索它

【讨论】:

    猜你喜欢
    • 2019-08-01
    • 2021-02-18
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2016-06-18
    • 2019-03-05
    相关资源
    最近更新 更多