1

我正在关注这个iOS 示例应用程序来集成 AppSync

我正在尝试对单个事件的评论进行分页。我不知道如何将字段参数传递给commentsEvent类型的字段。内省不会带来任何有价值的线索。

这就是我现在所拥有的:

let eventQuery = GetEventQuery(id: event.id)
appSyncClient?.fetch(query: eventQuery, cachePolicy: cachePolicy) { result, error in }

这就是我想要的虚构代码:

let eventQuery = GetEventQuery(id: event.id, comments: {limit:5})
appSyncClient?.fetch(query: eventQuery, cachePolicy: cachePolicy) { result, error in }

在 AWS 控制台中,我可以轻松地将参数传递给子字段,但我不知道如何使用自动生成的代码来执行此操作。所以这个问题不是关于 graphQL 本身,而是放大生成的代码。

query ListEvents {
  listEvents {
    items {
      id
      name
      comments(limit: 1) {
        items {
          content
        }
        nextToken
      }
    }
  }
}
4

1 回答 1

-1

实现此目的的一种方法是首先检索事件的 ID(除非您已经拥有事件 ID),然后将其用作过滤器的一部分,以使用ListCommentsQuery. 在您的 AWS AppSync 控制台中,您应该会看到 Comments 的列表查询操作,该操作采用您可以传递 eventId 的过滤器和您可以设置为 5 的限制。

示例中的模式并不明显,因此首先,您需要一个如下所示的模式:(应该与示例相似)。

amplify add api并选择 GraphQL,并使用此架构:

type Event @model {
  id: ID!
  // additional fields
  comments: [Comment] @connection(name: "EventComments")
}
type Comment @model {
  id: ID!
  // additonal fields
  event: Event! @connection(name: "EventComments")
}

然后使用amplify push. 当提示生成代码时,输​​入 Yes。此API.swift文件和 awsconfiguration.json 将与AppSync SDK一起使用。

如果您想实现相同的用例,AWS Amplify 最近发布了支持延迟加载连接的DataStore,因此您的代码看起来像

Amplify.DataStore.query(byId: eventId) { $0 in 
  switch $0 {
    case .success(let event):
      // access event.comments here to load the comments
    case .failure(let error):
      print("error \(error)")
  }
}

如果您还有其他问题,请随时在各自的存储库中打开一个问题,因为这些问题会受到积极监控

于 2020-06-09T19:22:54.923 回答