对象放大架构定义中未显示一对多关系 [英] One to Many Relationship not showing in the object Amplify Schema definition

查看:25
本文介绍了对象放大架构定义中未显示一对多关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对在GraphQL中使用Amplify还不熟悉。我正在设置我的数据库架构,并在运行Amplify Push之后自动生成函数。

我想实现但不知道如何实现的目标

  1. 我希望能够从getUser返回的对象中获取具有所有连接信息的用户(具有一对一和一对多关系)
  2. 我希望仍然能够获取UserByUserName并查看所有连接的一对多关系

调用接口生成的函数获取用户时

let user = await API.graphql(graphqlOperation(getUser,{id:userId}))

我得到的是一个User对象,但是,它看起来是这样的--尽管我确定数据库中的数据设置正确。

buttons: {nextToken: null} -- WANT THIS TO INCLUDE ACTUAL INFORMATION ABOUT BUTTONS CONNECTED TO THIS USER
createdAt: "2020-09-02T23:41:12.278Z"
customStyles: {id: "e3d1bbef-ec6f-4a6d-9b5d-e693e890d4e0", bgColor: "F9FF9F", bgBtnColor: "FFFFFF", bgBtnHoverColor: "000000", textColor: "000000", …}
defaultStyles: null
email: "nata@email.edu"
firstName: "Nata"
id: "d683a6bb-383e-4cf1-943a-05b3da4e5cc3"
lastName: "Vache"
socialNetwork: {nextToken: null} -- WANT THIS TO INCLUDE ACTUAL INFORMATION ABOUT SOCIAL NETWORKS CONNECTED TO THIS USER, THE SAME WAY AS FOR EXAMPLE customStyles IS SHOWN. 
updatedAt: "2020-09-02T23:41:12.278Z"
userName: "Nata568"

type User @model @key(name: "byUserName", fields: ["userName"], queryField: "userByUserName"){
  id: ID!
  firstName: String!
  lastName: String!
  userName: String!
  email: String!
  socialNetwork: [UserSocialNetwork] @connection(keyName: "UserSocialNetworkUser", fields: ["id"])
  buttons: [Button] @connection(keyName: "ButtonUser", fields: ["id"])
  defaultStyles: DefaultStyle @connection
  customStyles: CustomStyle @connection
}

type UserSocialNetwork @model @key(name: "UserSocialNetworkUser", fields: ["userID", "id"], queryField:"userSocialNetworkByUserID") {
  id: ID!
  socialNetworkUsername: String!
  userID: ID!
  supportedSocialNetwork: SupportedSocialNetwork! @connection
}

type SupportedSocialNetwork @model {
  id: ID!
  name: String!
  address: String!
}

type Button @model @key(name: "ButtonUser", fields: ["userID", "id"], queryField: "buttonByUserID") {
  id: ID!
  name: String!
  address: String!
  image: String
  userID: ID!
}

该模式不包括我的所有模型定义--CustomStyles、defaultStyles和其他定义,但它们是一对一的关系,工作得非常好。我遇到了一对多关系的问题,例如用户到用户社交网络和用户到按钮。

我在AWS Amplify Docs上阅读了很多关于这方面的资源,也看了很多例子,但仍然没有找到任何我可以使用的方法,使我能够从getUser调用的连接中获取信息,并使我能够通过用户名获取用户。 任何意见都将不胜感激!

推荐答案

这是查询深度的问题。默认为2,需要增加(在您的情况下为4)。

您可以通过以下步骤解决此问题。 在项目根目录下的cmd中(通常在其中运行Amplify命令)。

  1. 运行amplify codegen configure-这将再次提示配置。
  2. 为此选项输入4Enter maximum statement depth [increase from default if your schema is deeply nested]
  3. 运行amplify codegen-这将根据新的深度创建您的查询和突变。

您可以通过勾选grapgql/queries.js进行验证。

前面,您可以在grapgql/queries.js中的getUser查询中看到下面的片段,

buttons {
  nextToken
}

但按照上述解析步骤操作后,应该如下所示。

buttons {
    items {
        id
        image
        address
      }
  }

最终再次查询您的用户。

这篇关于对象放大架构定义中未显示一对多关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆