createUser 更新相关字段 - 了解关系

Posted

技术标签:

【中文标题】createUser 更新相关字段 - 了解关系【英文标题】:createUser update related field - understanding relation 【发布时间】:2017-06-27 23:37:21 【问题描述】:

我需要在创建时设置相关字段的值,可以吗?

详情: 我有一个带有字段的User 模型:email, displayname。 我有一个带有字段的Verify 模型:code, action

我在两个模型之间创建了这样的关系:

我想createUser,同时设置codeaction的相关字段。我试过这个:

mutation 
  createUser
  (
    email:"noit@mail.com",
    displayname:"noit",
    password:"123",
    code: "this is a code",
    action: "REGISTER"
  ) 
    id
  

这失败了:


  "data": null,
  "errors": [
    
      "message": "Unknown argument 'code' on field 'createUser' of type 'Mutation'. (line 2, column 76):\n  createUser(email: \"noit@mail.com\", displayname: \"noit\", password: \"123\", code: \"this is a code\", action: \"REGISTER\") \n                                                                           ^",
      "locations": [
        
          "line": 2,
          "column": 76
        
      ]
    ,
    
      "message": "Unknown argument 'action' on field 'createUser' of type 'Mutation'. (line 2, column 100):\n  createUser(email: \"noit@mail.com\", displayname: \"noit\", password: \"123\", code: \"this is a code\", action: \"REGISTER\") \n                                                                                                   ^",
      "locations": [
        
          "line": 2,
          "column": 100
        
      ]
    
  ]

【问题讨论】:

【参考方案1】:

我们专门设计了 Graphcool API 来尽可能简单地处理这种情况,你可以这样做:

mutation  
  createUser (
    email:"noit@mail.com",
    displayname:"noit",
    password:"123",
    blahVerify: 
      code: "this is a code",
      action: "REGISTER"  
    ) 
    id
    blahVerify 
      id  
     
  

注意嵌套的 blahVerify 对象参数。

This answer to a similar question 更详细地介绍了如何使用 GraphQL 变量从 Apollo 客户端发送嵌套突变。

作为旁注,根据验证节点的action 的不同可能值,您可能希望使用枚举字段而不是字符串。您可以阅读有关枚举字段 in the documentation 的更多信息。

【讨论】:

【参考方案2】:

您可以在scaphold.io 上执行此操作。逻辑系统不仅包括突变回调。您可以在突变之前触发函数以在将输入保存到数据库之前验证/清理输入,之后管理将在同一突变有效负载中返回的这样的连接,以及异步(如突变回调)以启动长期存在的任务。您甚至可以将函数组合在一起,以通过函数调用链传递元数据。

【讨论】:

有趣的谢谢@mparis!我希望在graphql中您可以与createUser同时(在一个操作中)创建一个相关条目,这在graphql中是不可能的吗?那么graphql中的每个突变一次只能影响一个模型? 不客气 :)。 GraphQL 并没有真正限制任何东西,由实现决定什么是可能的。例如,您还可以在涉及一对一或一对多关系时创建嵌套对象(例如scaphold.io/docs/#nested-create)。多对多有点棘手,后期逻辑功能可以帮助管理这些。例如,如果一个新用户注册了并且您想将他们注册到一个团队中(例如,如果他们正在注册像 slack 这样的应用程序) 请你看看我更新的问题,我想我一开始真的很困惑。我认为这比我想象的要简单。我需要在创建时设置相关字段的值,这可能吗? 大家好,我认为mparis的答案是正确的,在我编辑我的问题之前,请不要投反对票。我认为我的原帖应该投反对票,因为我措辞很糟糕。

以上是关于createUser 更新相关字段 - 了解关系的主要内容,如果未能解决你的问题,请参考以下文章

关于多对多关系表做一个级联更新的问题(MYSQL),求高手解答SQL语句

关于symfony的多对多关联关系的字段更新

Laravel Eloquent - 保存/更新相关的一对多关系数据

NestJS-Prisma 如何使用关系字段创建记录?

带有官方 Graphql 教程的“无法在 CreateUser 类型上查询字段 'id'”

关于SQL的相关笔记长期更新,只发一帖