如何使用GraphQL创建一对多关系?
我有一个iOS应用程序,用户可以使用后端AWS Amplify登录并发送消息。我的API是使用GraphQL配置的,目前看起来是这样的如何使用GraphQL创建一对多关系?,graphql,aws-amplify,Graphql,Aws Amplify,我有一个iOS应用程序,用户可以使用后端AWS Amplify登录并发送消息。我的API是使用GraphQL配置的,目前看起来是这样的 type User @model { id: ID! userSub: String! fullName: String! } type ChatMessage @model { id: ID! senderUserSub: String recieverUserSub: String messageText: String me
type User @model {
id: ID!
userSub: String!
fullName: String!
}
type ChatMessage @model {
id: ID!
senderUserSub: String
recieverUserSub: String
messageText: String
messageImageFilename: String
dateSent: String!
}
我不熟悉GraphQL及其模式定义语言。上面的模式可以工作,但是在dynamodb表中没有结构,我正在尝试为用户消息传递创建一种有效的结构化数据的方法。“一对多关系”是配置API时可以在Amplify CLI中找到的模式示例。我试着从我现在的例子中复制它的例子
默认一对多关系模式
type Blog @model {
id: ID!
name: String!
posts: [Post] @connection(keyName: "byBlog", fields: ["id"])
}
type Post @model @key(name: "byBlog", fields: ["blogID"]) {
id: ID!
title: String!
blogID: ID!
blog: Blog @connection(fields: ["blogID"])
comments: [Comment] @connection(keyName: "byPost", fields: ["id"])
}
type Comment @model @key(name: "byPost", fields: ["postID", "content"]) {
id: ID!
postID: ID!
post: Post @connection(fields: ["postID"])
content: String!
}
我试着像这样复制它的例子
type User @model {
id: ID!
userSub: String!
fullName: String!
}
type ChatMessage @model {
id: ID!
senderUserSub: String
recieverUserSub: String
messageText: String
messageImageFilename: String
dateSent: String!
}
更新的模式
type User @model {
id: ID!
userSub: String!
fullName: String!
messages: [ChatMessage] @connection(keyName: "byUser", fields: ["id"])
}
type ChatMessage @model @key(name: "byUser", fields: ["messageID"]){
id: ID!
messageID: ID!
senderUserSub: String
recieverUserSub: String
messageText: String
messageImageFilename: String
dateSent: String!
user: User @connection(fields: ["messageID"])
}
我想知道上面更新的模式看起来是否合适?如果可能的话,有人能给我一些建议,告诉我如何正确地制作一个用于消息传递的工具吗?我对GraphQL SDL没有经验。这种连接不需要使用@key属性。您可以为@connection指定一个名称,以便amplify理解您所指的连接,如下所示:
@connection(name: "nameOfYourConnection")
必须在两种类型的连接属性上提供名称
type User @model {
id: ID!
userSub: String
fullName: String
chatMessages: [ChatMessage] @connection(name: "UserChatMessageConnection") #new
}
type ChatMessage @model {
id: ID!
senderUserSub: String
recieverUserSub: String
messageText: String
messageImageFilename: String
dateSent: String!
user: User @connection(name: "UserChatMessageConnection") #new
}
运行amplify push后,您将在生成的突变中插入,即当您创建一个ChatMessage对象时,您应该给它一个名为chatMessagesUserId
的值。这是用户创建ChatMessage的引用(用户类型上的id)