aws graphql @connection 没有按预期返回数组?
aws graphql @connection not returning an array as expected?
我有一个graphql模型如下(一个用户可以有很多帖子1:m)
type User @model {
id: ID!
fullName: String!
emailAddress: String!
posts: [Post] @connection(name: "UserPostConnection")
}
type Post @model {
id: ID!
text: String!
user: User @connection(name: "UserPostConnection")
createdAt: String
updatedAt: String
}
我正在尝试 return 特定用户的所有帖子,因此:
let queryInput = GetUserQuery(id: "879db4f2-1dad-47b9-b70d-8bca15bf2549")
appSyncClient?.fetch(query: queryInput, cachePolicy: .fetchIgnoringCacheData) { (result, error) in
print(result?.data?.getUser?.posts)
}
}
但是结果不是 return 数组,它是 return 一个可选的:
Optional(AWSStackSocial.GetUserQuery.Data.GetUser.Post(snapshot: ["__typename": Optional("ModelPostConnection"), "nextToken": nil]))
我已确认 a) 用户存在,b) 帖子也存在。
在 AWS 上:
query {
getUser(id: "879db4f2-1dad-47b9-b70d-8bca15bf2549") {
id
posts {
items {
id
}
}
}
}
输出:
{
"data": {
"getUser": {
"id": "879db4f2-1dad-47b9-b70d-8bca15bf2549",
"posts": {
"items": [
{
"id": "04c4b571-6e92-4745-9a40-1a67a9d49d77"
},
{
"id": "0f44fe6e-4e15-4a8c-b591-555e8fa1f60e"
},
{
"id": "60c18c40-fea3-4ff3-8b21-df6857703dd2"
}
]
}
}
}
}
根据定义,模型中没有所需后缀 (!
) 的任何内容都是可选的,无论它是否存在。您必须防止它成为 nil
,因为它的定义使得它 可以 成为 nil
。如果您拥有该模型,则可以根据需要更改这些模型(我不建议这样做!)。否则,您将只需要在处理它们时打开包装。
guard let user = result?.data?.getUser, let posts = user.posts else { throw NoPostsError }
我找到了答案。 amplify GraphQL 的默认深度级别是 2,因此需要将其更改为 3。这可以通过更改最大深度来完成:
amplify codegen configure
我有一个graphql模型如下(一个用户可以有很多帖子1:m)
type User @model {
id: ID!
fullName: String!
emailAddress: String!
posts: [Post] @connection(name: "UserPostConnection")
}
type Post @model {
id: ID!
text: String!
user: User @connection(name: "UserPostConnection")
createdAt: String
updatedAt: String
}
我正在尝试 return 特定用户的所有帖子,因此:
let queryInput = GetUserQuery(id: "879db4f2-1dad-47b9-b70d-8bca15bf2549")
appSyncClient?.fetch(query: queryInput, cachePolicy: .fetchIgnoringCacheData) { (result, error) in
print(result?.data?.getUser?.posts)
}
}
但是结果不是 return 数组,它是 return 一个可选的:
Optional(AWSStackSocial.GetUserQuery.Data.GetUser.Post(snapshot: ["__typename": Optional("ModelPostConnection"), "nextToken": nil]))
我已确认 a) 用户存在,b) 帖子也存在。
在 AWS 上:
query {
getUser(id: "879db4f2-1dad-47b9-b70d-8bca15bf2549") {
id
posts {
items {
id
}
}
}
}
输出:
{
"data": {
"getUser": {
"id": "879db4f2-1dad-47b9-b70d-8bca15bf2549",
"posts": {
"items": [
{
"id": "04c4b571-6e92-4745-9a40-1a67a9d49d77"
},
{
"id": "0f44fe6e-4e15-4a8c-b591-555e8fa1f60e"
},
{
"id": "60c18c40-fea3-4ff3-8b21-df6857703dd2"
}
]
}
}
}
}
根据定义,模型中没有所需后缀 (!
) 的任何内容都是可选的,无论它是否存在。您必须防止它成为 nil
,因为它的定义使得它 可以 成为 nil
。如果您拥有该模型,则可以根据需要更改这些模型(我不建议这样做!)。否则,您将只需要在处理它们时打开包装。
guard let user = result?.data?.getUser, let posts = user.posts else { throw NoPostsError }
我找到了答案。 amplify GraphQL 的默认深度级别是 2,因此需要将其更改为 3。这可以通过更改最大深度来完成:
amplify codegen configure