如何检索 属性 的所有子属性,即使它的值在数据库中为空(而不是对象)?

How to retrieve all sub-properties of a property even is its value is null in database (instead of Object)?

(POST 末尾的解决方案)

考虑一个名为 userFetchquery,其定义如下:

type User_Details {
  phone_number: String
}

type User {
  name: String
  details: User_Details 
}

当使用数据库中的以下数据获取 User 时,我没有得到子字段 phone_number

// in database
{
  name: "Joe"
}

通过 GraphQL 我得到以下信息:

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

我期望的时间:

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

如何让 GraphQL 保留子字段,即使所有的子字段都是空值?

这是我的前端的一个问题,因为在前面的示例中缺少整个子对象。

感谢您的提示和技巧;)


编辑:解决方案

我知道 GraphQL 是透明的,不强制执行任何输出格式(只需从获取的数据中选择可用的格式)。 对于我的情况,我(有时)想要强制执行此行为。主要情况是当我在客户端界面中使用响应并且需要能够使用所有子属性,即使尚未在数据库中设置也是如此。

事先你必须知道我已经围绕 graphql 构建了一个环境,它允许我做很多事情(比如获取类型的 default/empty 对象)。 尚未开源。

为了对数据库中保存的所有子属性强制执行响应,我创建了一个 GraphQL 中间件,它 将已解析的数据与我的默认 value/object.

通过这种方式,它是我的 graphql 端点上的一个简单附加组件,它根据请求参数允许我强制执行完整响应或简单的常规响应:)

GraphQL 不会确定字段的值,它只是一个传输层。如果您的对象看起来像这样:

const user = { name: "Joe" };

您的查询如下所示:

{
  user {
    name
    details
  }
}

GraphQL 引擎无法计算出您用户的实际详细信息,因为详细信息为空(或未定义,这与此问题相同)。如果你想发送 non-null user.details 你必须从某个地方获取它们。
具体来说,如果您希望您的回复如下所示:

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

您发送的用户必须如下所示:

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