gpt4 book ai didi

graphql - 如何使用 GraphQL 创建一对多关系?

转载 作者:行者123 更新时间:2023-12-02 19:23:09 25 4
gpt4 key购买 nike

我有一个 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
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!
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)。

关于graphql - 如何使用 GraphQL 创建一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62766602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com