В настоящее время я слежу за документами AWS Amplify и использую схему GraphQL по умолчанию для блога, чтобы попытаться создать реляционные таблицы Dynamo DB.
В таблицах модели блога показано в DynamoDB, и я могу загружать в них информацию, я просто не знаю, как сделать их взаимосвязанными. Типы моделей: Blog
, Post
и Comment
. Например, после загрузки сообщения в его таблицу DynamoDB, как я могу связать загруженный комментарий с тем же сообщением? В моем коде Swift я пытаюсь сделать это, но безуспешно.
Я также не понимаю синтаксис List<Comment>.init()
, и, вероятно, его там не должно быть, но ошибок нет. Может быть, это причина моей проблемы.
Создание сообщения:
let blog = Blog(name: "UserBlog", posts: List<Post>.init())
let posts = Post(title: "Testing out AWS", blog:blog, comments: List<Comment>.init())
_ = Amplify.API.mutate(request: .create(posts)) { event in
switch event {
case .success(let result):
switch result {
case .success(let post):
print("Successfully created the post: \(post)")
case .failure(let graphQLError):
print("Failed to create graphql \(graphQLError)")
}
case .failure(let apiError):
print("Failed to create a todo", apiError)
}
}
Вывод из консоли отладки
Successfully created the post: Post(id: "83D71F16-6B0D-453A-A163-AABF484CE527", title: "Testing out AWS", blog: nil, comments: nil)
Затем после создания комментария для этого сообщения с помощью этот код
let blog = Blog(name: "UserBlog", posts: List<Post>.init())
let posts = Post(title: "Testing out AWS", blog:blog, comments: List<Comment>.init())
let comments = Comment(content: "It worked", post: posts)
_ = Amplify.API.mutate(request: .create(comments)) { event in
switch event {
case .success(let result):
switch result {
case .success(let comment):
print("Successfully created the comment: \(comment)")
case .failure(let graphQLError):
print("Failed to create graphql \(graphQLError)")
}
case .failure(let apiError):
print("Failed to create a todo", apiError)
}
}
Вывод из консоли отладки
Successfully created the comment: Comment(id: "85395F8B-C8C2-4ACB-8FC5-DAEFC2728C32", content: Optional("It worked"), post: nil)
И, наконец, после выборки из таблиц с использованием этого кода
let post = Post.keys
let predicate = post.title == "Testing out AWS"
_ = Amplify.API.query(request: .list(Post.self, where: predicate)) { event in
switch event {
case .success(let result):
switch result {
case .success(let post):
print("Successfully retrieved list of posts: \(post)")
case .failure(let error):
print("Got failed result with \(error.errorDescription)")
}
case .failure(let error):
print("Got failed event with error \(error)")
}
}
Вывод из консоли отладки
Successfully retrieved list of posts: [testAWS.Post(id: "83D71F16-6B0D-453A-A163-AABF484CE527", title: "Testing out AWS", blog: nil, comments: nil)]
Как связать комментарий с сообщением, чтобы при запросе комментарий отображался вместо nil
Моя схема:
type Blog @model {
id: ID!
name: String!
posts: [Post] @connection(name: "BlogPosts")
}
type Post @model {
id: ID!
title: String!
blog: Blog @connection(name: "BlogPosts")
comments: [Comment] @connection(name: "PostComments")
}
type Comment @model {
id: ID!
content: String
post: Post @connection(name: "PostComments")
}