Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用父id来放置子对象的数据?

如何使用父id来放置子对象的数据?
EN

Stack Overflow用户
提问于 2021-08-08 21:25:26
回答 1查看 103关注 0票数 1
代码语言:javascript
运行
AI代码解释
复制
   final class InformationController{

    func create (_ req: Request) throws -> EventLoopFuture<Pers>{
        let perinfo=try req.content.decode(Pers.self)
        return perinfo.save(on: req.db).map {perinfo}
    }

    func putpers (_ req: Request) throws -> EventLoopFuture<HTTPStatus>  {
            let information = try req.content.decode(Pers.self)
            return Pers.find(information.$user.id, on: req.db)
                .unwrap(or: Abort(.notFound))
                .flatMap{
                    $0.name=information.name
                    $0.account=information.account
                    $0.picture=information.picture
                    $0.age=information.age
                    $0.birth=information.birth
                    $0.city=information.city
                    $0.hobby=information.hobby
                    return $0.update(on: req.db).transform(to: .ok)
                }
        }
}
final class UserController{

    func signup (_ req: Request) throws -> EventLoopFuture<User>{
            
            try User.Create.validate(content: req)
    
                // 從request body中decode出User.Create
            let newUser = try req.content.decode(User.Create.self)
                // 先檢查密碼是否==確認密碼
            guard newUser.password == newUser.confirmPassword else {
                throw Abort(.badRequest, reason: "Passwords did not match")
            }
                // 將User.Create 轉成 User
            let user = try User(account: newUser.account, password: Bcrypt.hash(newUser.password))
                // 儲存User並回傳
            return user.save(on: req.db).map { user }
        }
}

这是我的控制器。我使用User作为父进程。还有小时候的Pers。但是当我用邮递员做api的时候。它一直在告诉我:

因为我觉得用两个is来做这个动作有点奇怪。我以one to many的形式建立关系。因为我在作用域中找不到Child

路由:

代码语言:javascript
运行
AI代码解释
复制
    import Fluent
import Vapor

func routes(_ app: Application) throws {
    
    let userController = UserController()
    let informationController=InformationController()
    let passwordProtected = app.grouped(User.authenticator(),User.guardMiddleware())
    let tokenProtected = app.grouped(UserToken.authenticator(),UserToken.guardMiddleware())
    

    
    
    //修改密碼
    app.put("user",":userId", use:userController.update)//
    
    //第一次上傳個人資料
    app.post("information", use:informationController.create)//
    
    //更新個人資料
    app.put("information", use:informationController.new)
    
    //註冊
    app.post("signup", use:userController.signup)//ok
    
    //登陸
    passwordProtected.post("login",use: userController.login)//
    
    //登陸後收到個人資料
    tokenProtected.get("getperinfo",use: userController.getperinfo)//
    
    //收到他人資料
    app.get("otherperinfo",":userId",use:informationController.otherperinfo)//
    
    //登出
    app.delete("logout",":user_tokensId", use: userController.logout)//
}

父模型:

代码语言:javascript
运行
AI代码解释
复制
import Foundation
import Fluent
import Vapor
import FluentPostgresDriver


final class User:Model,Content{
    static let schema = "user"
    
    @ID(key: .id)
    var id:UUID?
    
    @Field(key:"帳號")
    var account:String
    
    
    @Field(key: "密碼")
    var password:String
    
    @Children(for: \.$user)
    var perinfo: [Pers]
    
    
    init() {}
    
    init(id: UUID?=nil, account:String, password:String){
        self.id=id
        self.account=account
        self.password=password
    }    
}

儿童模型:

代码语言:javascript
运行
AI代码解释
复制
 import Foundation
import Fluent
import Vapor
import FluentPostgresDriver




    final class Pers:Model,Content{
        static let schema = "pers"
        
        @ID(key: .id)
        var id:UUID?
        
        @Field(key: "姓名")
        var name: String
        
        @Field(key: "IG帳號")
        var account: String
        
        @Field(key: "頭像")
        var picture: String
        
        @Field(key: "年紀")
        var age: String
        
        @Field(key: "生日")
        var birth: String
        
        @Field(key: "居住城市")
        var city: String
        
        @Field(key: "興趣")
        var hobby : String
        
        @Parent(key: "user_id")
        var user: User
        
        
        
        init(){}
        
        init(id:UUID?=nil, name:String, account:String, picture:String ,age:String, birth:String, city:String, hobby:String, userId:UUID){
            self.id=id
            self.name=name
            self.account=account
            self.picture=picture
            self.age=age
            self.birth=birth
            self.city=city
            self.hobby=hobby
            self.$user.id=userId
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 05:47:34

您遇到的问题是,您向API发送了一个平面JSON对象,很可能是试图将其解码为具有父子关系的模型。Fluent的属性包装器可以很容易地显示关系,但它也可以以另一种方式工作。

您有两个选择:

更改您发送的JSON以匹配Vapor期望的内容,使其如下所示:

代码语言:javascript
运行
AI代码解释
复制
{
  "name": "dog",
  "account": "222", 
  // ...
  "user": {
    "id": "<USER_ID>"
  }
}

或者,您可以创建一个DTO,匹配您希望客户端发送给您的数据,对其进行解码,将其转换为Pers并保存。有关示例,请参阅Vapor TIL repo

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68707201

复制
相关文章
将Emoji表情添加到项目中 顶
选择完需要的表情,点击消息预览就可以看到效果了,有一个微笑表情是QQ表情~~ 可以不用管它。
linapex
2019/03/26
1.9K0
将Emoji表情添加到项目中
                                                    顶
GitLab 冷知识:使用 Gitlab Webhook 触发 Pipeline
笔者入职极狐 GitLab 已经一年有余,在日常工作中高强度使用 GitLab,积累了不少使用经验和技巧。遂将这些经验归纳总结,开启一个名为《GitLab 冷知识》的新系列文章,介绍那些 GitLab 中比较冷门却十分好玩的功能。
郭旭东
2022/12/05
2.7K0
GitLab 冷知识:使用 Gitlab Webhook 触发 Pipeline
Gitlab利用Webhook+jenkins实现自动构建与部署
之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台。通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布。
我被狗咬了
2020/12/15
1.4K0
Gitlab利用Webhook+jenkins实现自动构建与部署
Webhook 是什么?Webhook与API有什么区别
相信很多用户在使用企业微信机器人、飞书机器人、钉钉机器人、腾讯云HiFlow场景连接器、腾讯问卷这些应用时,都有一个问题,这些应用都提供了Webhook,但是部分没有代码开发能力的人可能很困惑,Webhook究竟是什么?我应该如何使用?
阿那个沫
2022/11/04
14.7K0
Webhook 是什么?Webhook与API有什么区别
Gitlab 利用 Webhook+jenkins 实现自动构建与部署
之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台。通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布。
民工哥
2020/11/09
1K0
Gitlab 利用 Webhook+jenkins 实现自动构建与部署
Gitlab利用Webhook实现Push代码后的jenkins自动构建
之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台。通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布。这种方式每次在发版的时候,需要人工去执行jenkins上的构建动作,有时显得过于繁琐。于是就想到了Gitlab的Webhook功能,通过Webhook的相关设置,可以实现代码Push后,自动去触发jenkins上的构建动作,这样就不需要人工干预去执行发版操作了。设置如下: 1)Jenkins上的操作 通常,jenkins在项目配置时是可以配置远程构建触发
洗尽了浮华
2018/01/23
1.7K0
Gitlab利用Webhook实现Push代码后的jenkins自动构建
基于 Gitlab 关联 Jenkins 实现自动化构建
之前部署了 Gitlab 的代码托管平台和 Jenkins 的代码发布平台。通常是开发后的代码先推到 Gitlab 上管理,然后在 Jenkins 里通过脚本构建代码发布。这种方式每次在发版的时候,需要人工去执行 Jenkins 上的构建动作,有时显得过于繁琐。
DevOps时代
2019/08/23
5.3K0
3天学会Jenkins_10_gitlab or github代码提交后自动构建1
转载注明出处,欢迎关注微信小程序小白AI博客 微信公众号小白AI或者网站 https://xiaobaiai.net或者我的CSDN https://blog.csdn.net/freeape
别打名名
2019/12/23
8960
3天学会Jenkins_10_gitlab or github代码提交后自动构建1
图床,通过Python调用api上传图片到Gitlab
用过一段时间的PicGo,但是感觉太重了,为了一个上传图片去装一个软件有点太麻烦。 然后目前个人感觉也就Gitlab速度还可以一点,于是昨天翻了官方文档踩了很多坑,总算搞好了。 现将关键代码放到这里。
SingYi
2023/08/23
4850
图床,通过Python调用api上传图片到Gitlab
GitLab API使用
获取管理员private_token 1.使用管理员身份登录 2.进入配置界面 配置界面 3.获取private_token,并粘贴到项目目录src/main/resource/propertie
Meet相识
2018/09/12
9.9K2
GitLab API使用
DevOps之代码模块设计浅析
DevOps(开发:Development和运维:Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
yuanyi928
2020/07/22
9140
Java版 Gitlab Webhook + 钉钉机器人通知
在下才疏学浅,谨以此奉上Github地址为社区尽绵薄之力 : Gitlab Webhook+钉钉机器人通知
EalenXie
2022/01/21
1.1K0
Java版 Gitlab Webhook + 钉钉机器人通知
腾讯会议API - 获取REST API & Webhook应用对接信息
购买腾讯会议企业版或者商业版,将自动开通企业 API 接入能力,企业管理员可登录腾讯会议官网(https://meeting.tencent.com/),单击页面右上角【用户中心】,选择左侧菜单栏中的【高级】-【restApi】进入应用创建页面,点击添加应用即可创建密钥对。
liquid
2021/06/24
2.4K0
腾讯会议API - 获取REST API & Webhook应用对接信息
Webhook 与 API:有什么区别?
数字时代的关键驱动力是通信。作为人类,我们希望技术能够帮助我们更快、更轻松地与更多人交流。想要实现这一点,我们必须首先找到一种让技术相互交流的方法,这就是 API 和 webhook 发挥作用的地方。
用户9958066
2022/09/09
2.6K0
Python Gitlab Api 使用
简述 公司使用gitlab 来托管代码,日常代码merge request 以及其他管理是交给测试,鉴于操作需经常打开网页,重复且繁琐,所以交给Python 管理。 官方文档 安装 pip install python-gitlab 环境: py3 DEMO # -*- coding: utf-8 -*- __Author__ = "xiewm" __Date__ = '2017/12/26 13:46' """ gitlab 经常使用到的api DOC_URL: ht
py3study
2020/01/06
6.2K0
gitlab官方api使用
Gitlab作为一个开源、强大的分布式版本控制系统,已经成为互联网公司、软件开发公司的主流版本管理工具。使用过Gitlab的都知道,想要提交一段代码,可以通过git push提交到远程仓库,也可以直接在Gitlab平台上修改提交。然而上述两种提交方式都是人工提交代码,需要手动登录Gitlab或者在第一次commit的时候提供Gitlab帐号和密码。
陈不成i
2021/06/07
1.9K0
Gitlab配置webhook报错:Urlis blocked: Requests to the local netwo..解决
在Gitlab 10.6以后的版本为了安全起见,默认不允许向本地网络发送webhook请求,但是可以使用管理员身份修改默认设置!
非著名运维
2022/06/22
2.3K0
Gitlab配置webhook报错:Urlis blocked: Requests to the local netwo..解决
腾讯会议API - Webhook介绍与简单实现
可以看到,REST API是由用户应用主动向腾讯会议后台发起请求,然后后台进行响应;而Webhook是由特定事件来触发,然后腾讯Webhook服务主动向用户发起请求。例如在配置Webhook时订阅了用户入会事件消息之后,当会议中有人入会时,后台就会给用户配置的Webhook应用发送POST消息。
liquid
2023/08/17
3K0
将Sublime添加到鼠标右键
2、找到 HKEY_CLASSES_ROOT/*/shell 目录,在此目录下操作。
新码农
2020/03/05
3.1K0
前端构建 DevOps - Gitlab Api
DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
Cookieboty
2020/10/23
8340
前端构建 DevOps  - Gitlab Api

相似问题

为什么我不能做悬停?

213

为什么我不能做全屏

12

为什么我不能做'cout << 3*“;'?

34

为什么我不能做黄瓜呢?

21

为什么我不能做这个更新?

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档