#graphql #aws-amplify #aws-appsync
#graphql #aws-amplify #aws-appsync
Вопрос:
Обычно я бы не пытался создавать отношения между первичными ключами в моей схеме Amplify, хотя я пытаюсь воссоздать код друзей, чтобы я мог регулярно развертывать его с помощью Amplify, поэтому у меня действительно нет выбора в этом случае.
Мой вопрос заключается в том, что я хотел бы создать связь между этими двумя первичными ключами, и мне было интересно, есть ли способ сделать это, я также уже следил за документацией здесь.
В идеале я хотел бы, чтобы мой файл schema.graphql выглядел следующим образом:
type ShoppingList @model @key(fields: ["UPC"]) {
UPC: Products @connection
quantity: Int
timestamp: Int
}
type Products @model @key(fields: ["UPC"]) {
UPC: String!
Description: String
Name: String
Price: Float
ProductId: String
combinedSeaarchKey: String
Img_URL: String
LongDescription: String
UserForRecommendations: Boolean
Hidden: Boolean
TrainingImageWidthInches: Float
}
При попытке развернуть это, я получаю сообщение об ошибке «Ожидаемые скалярные и полученные продукты».
В идеале я хочу, чтобы схема была такой же, поскольку я не хочу переписывать приложение на стороне клиента моих друзей, а предпочел бы попытаться исправить это в схеме!
Следовательно, любая помощь будет с благодарностью! Спасибо
Ответ №1:
Искал решение той же общей проблемы, наткнулся на ваш пост, но затем решил мою проблему. Моя проблема была немного не связана, я пытался выполнить сортировку по нескалярному полю. В вашем случае вы получаете эту ошибку, пытаясь создать ключ из нескалярной сущности. Удалите этот @key из списка покупок, и вы должны устранить свою ошибку, но давайте поговорим о том, чего, я полагаю, вы пытаетесь достичь.
Я предполагаю, что вы пытаетесь установить соотношение 1: Много между списком покупок и продуктами.
В вашем коде списка покупок у вас есть продукты как единое целое, но, вероятно, подразумевается, что у вас есть массив продуктов:
UPC: [Products]
Оттуда вам нужно определить ваше соединение между UPC и продуктами. Вы правильно вызвали использование @connection , но не создали соединение. Чтобы создать соединение в соотношении 1: Много, вам понадобится 1 список покупок и много продуктов. Для достижения этого вам, вероятно, потребуется следующее:
type ShoppingList @model {
id: ID! #make sure you're specifying a PK for each object
UPC: [Products] @connection(keyName: "relatedShoppingList" fields: ["id"])
quantity: Int
timestamp: Int
}
type Products @model {
id: ID!
parentShoppingList: ShoppingList @connection(fields: "relatedShoppingList")
UPC: String!
Description: String
Name: String
Price: Float
ProductId: String
combinedSearchKey: String
Img_URL: String
LongDescription: String
UserForRecommendations: Boolean
Hidden: Boolean
TrainingImageWidthInches: Float
}
Я предвижу некоторые дополнительные проблемы с вашей настройкой данных, но это должно разблокировать ваше соотношение 1: много между продуктами и списками покупок.