如何为模型添加其他属性?

迅捷山猫

我有一个Model符合Content

import Vapor
import Fluent

final class User: Model, Content {
    static let schema = "user"
    
    @ID(key: .id)
    var id: UUID?

    @Field(key: "email")
    var email: String

    init() { }

    init(id: UUID? = nil, email: String) {
        self.id = id
        self.email = email
    }
}

可以从数据库中获取并直接从路由返回,因此客户端将用户作为JSON接收。

现在,我想向用户添加一个附加属性,该属性不存储在数据库中,而是一个固定值,或者只是在用户从数据库加载后添加:

final class User: Model, Content {
    // ...
    var someOther: String = "hello"
    // ...
}

要么

final class User: Model, Content {
    // ...
    var someOther: String? // set later
    // ...
}

现在的问题是,这个属性没有被加入到JSON,所以客户端只得到了用户的idemailsomeProperty我该如何解决?

卡列布·克里夫特(Caleb Kleveter)

当您要从客户端发送或接收与模型具有不同表示形式的数据时,通常的做法是定义一个自定义类型,然后可以在该类型之间进行转换。

鉴于此,您将定义一个User.Response符合的新类型,Content而不是User模型,然后从您的路线返回该类型。

extension User {
    struct Response: Content {
        let id: UUID
        let email: String
        let otherValue = "Hello World"
    }
}


func user(request: Request) throws -> EventLoopFuture<User.Response> {
    return User.find(UUID(), on: request.db).flatMapThrowing { user in
        guard let id = user.id else {
           throw Abort(.internalServerError, "User is missing ID")
        }

        return User.Response(id: id, email: user.email) 
    }
}

您添加的附加价值不是从你的模型编码的原因是因为模型类型遍历字段属性的默认编码器和编码这些属性,所以如果你有不使用的一个属性IDFieldParentChildren或其他字段属性包装器,则不会对其进行编码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何为其他模型返回字段ncm?

来自分类Dev

如何为模板数据分配其他属性?

来自分类Dev

如何为PDF添加其他Git差异工具?

来自分类Dev

如何为其他目录添加包含规则?

来自分类Dev

如何为flutter添加其他iOS模拟器?

来自分类Dev

如何为分段POST请求添加其他参数?

来自分类Dev

十月Cms。如何为模型添加属性?

来自分类Dev

从其他模型更新属性

来自分类Dev

如何向modelformset_factory添加其他模型形式

来自分类Dev

如何在Joomla中添加其他模型的视图

来自分类Dev

如何手动添加其他模型进行查看?

来自分类Dev

如何从其他位置在 Razor 页面中添加模型

来自分类Dev

包含其他模型属性的MVC模型

来自分类Dev

如何子类化Django TextChoices以添加其他属性?

来自分类Dev

如何向嵌套数组添加其他属性?

来自分类Dev

如何在 Angular 的 CSS 中添加其他样式属性?

来自分类Dev

如何从其他模型退货?

来自分类Dev

如何为CsvHelper模型属性添加属性以控制数字解析?

来自分类Dev

如何将模型与其他(相关)模型的属性结合(从子图中绘制数据)

来自分类Dev

如何使Django模型独占其他模型

来自分类Dev

如何为对象添加属性?

来自分类Dev

Laravel 5:其他模型的访问属性

来自分类Dev

Rails中其他模型的访问属性

来自分类Dev

在表单中添加其他模型?

来自分类Dev

如何为非匿名函数向getJson回调添加其他参数?

来自分类Dev

如何为一个类添加其他JUnit测试?

来自分类Dev

如何为单个Promise All Array添加void Promise和其他类型的Promise

来自分类Dev

如何为所有其他运行时错误添加通用错误页面?

来自分类Dev

如何为Devise user_signed_in添加其他范围?帮手?

Related 相关文章

热门标签

归档