Graphql схема проектирования лучших практик - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть вопрос ниже:

Допустим, у меня есть такой продукт типа

type Option {
  id: Int!
  value: String!
}

type Product{
  id: Int!
  name: String!
  price: Float!
  options: Option
}

Если у меня есть такая схема, каждый раз, когда мне нужны варианты продукта (у меня есть productID из запроса), мне нужно запросить весь продукт (с идентификатором, именем, ценой), и у меня будет 2 Mysql запросов к базе данных (1 для получения продукта и 1 для получения вариантов продукта).

Нужно ли мне иметь дополнительное автономное поле в объекте Query, подобное этому, чтобы получить базу опций продукта по productID? И если мне нужно сохранить вложенную схему, как описано выше, есть ли способ получить параметры продукта, не выполняя его родительский (Product) преобразователь?

product_options(productId: Int!) : Option

Спасибо

1 Ответ

0 голосов
/ 01 апреля 2020

Я думаю, что это скорее вопрос взаимосвязи данных, но тем не менее ...

IMO таблица для Product Options в базе данных SQL (если она еще не существует) должна иметь столбец, который является внешним ключом для Product, к которому он принадлежит / связан с. Это позволяет вам легко иметь вложенные типы GraphQL и средства разрешения уровня поля.

После того, как это будет сделано, вам не понадобится отдельный запрос для структуры параметров, для определения значения уровня поля для Product.options достаточно просто запросить :

{
  product(id: 123) {
    options {
      value
    }
  }
}

Вы можете использовать уже извлеченное поле Product.id в своем коде, чтобы выполнить запрос на уровне поля для их строки параметров.

...