Связи между первичными ключами с файлом схемы усиления

#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: много между продуктами и списками покупок.