Как получить все подсвойства свойства, даже если его значение равно нулю в базе данных (вместо объекта)?

(РЕШЕНИЕ В КОНЦЕ ПОСТА)

Рассмотрим запрос с именем пользовательFetch со следующим определением:

type User_Details {
  phone_number: String
}

type User {
  name: String
  details: User_Details 
}

При извлечении Пользователь со следующими данными в базе данных я не получаю подполе телефонный номер.

// in database
{
  name: "Joe"
}

Через GraphQL получаю следующее:

// response
{
  name: "Joe",
  details: null
}

когда я ожидал:

// expected response
{
  name: "Joe",
  details: {
    phone_number: null
  }
}

Как я могу заставить GraphQL сохранять подполя, даже если все они пусты?

Это проблема для моего внешнего интерфейса, когда отсутствуют целые подобъекты, как в предыдущем примере.

Спасибо за советы и хитрости ;)


Обновлено: РЕШЕНИЕ

Я понимаю, что GraphQL прозрачен и не применяет какой-либо формат вывода (просто выберите то, что доступно из полученных данных). В моем случае я (иногда) хочу применить это поведение. Основной случай — это когда я использую ответ в клиентском интерфейсе и мне нужно иметь возможность играть со всеми подсвойствами, даже если они еще не установлены в базе данных.

Заранее вы должны знать, что я уже построил среду вокруг graphql, которая позволяет мне много вещей (например, получение объекта по умолчанию/пустого типа). Еще не с открытым исходным кодом.

Чтобы обеспечить ответ со всеми подсвойствами, которые были сохранены в базе данных, я создал Промежуточное ПО GraphQL, который объединяет разрешенные данные с моим значением/объектом по умолчанию.

Таким образом, это простое дополнение к моей конечной точке graphql, которое в зависимости от параметров запроса позволяет мне заставить полный ответ или минималистичный обычный :)

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
0
688
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

GraphQL не определяет значение поля, это просто транспортный уровень. Если ваш объект выглядит так:

const user = { name: "Joe" };

И ваш запрос выглядит так:

{
  user {
    name
    details
  }
}

Движок GraphQL не может определить фактические данные вашего пользователя, поскольку данные пусты (или не определены, что в данном случае то же самое). Если вы хотите отправить ненулевые user.details, вы должны откуда-то их получить.
Чтобы быть конкретным, если вы хотите, чтобы ваш ответ выглядел так:

{
  name: "Joe",
  details: {
    phone_number: null
  }
}

Пользователь, которого вы отправляете, должен выглядеть так:

const user = {
  name: "Joe",
  details: {
    phone_number: null
  }
}

Спасибо за вашу помощь. Я работал над этим, как описано в моем исходном посте :)

gahabeen 22.06.2019 11:57

Другие вопросы по теме