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

Graphql 如何在数据库(而不是对象)中检索属性的所有子属性(即使其值为null)?,graphql,graphql-js,Graphql,Graphql Js,(文章末尾的解决方案) 考虑一个名为userFetch的查询,其定义如下: type User_Details { phone_number: String } type User { name: String details: User_Details } 在数据库中获取具有以下数据的用户时,我没有子字段电话号码 //在数据库中 { 姓名:“乔” } 通过GraphQL,我得到以下信息: //响应 { 姓名:“乔”, 详细信息:空 } 当我期望: //预期响应 { 姓名:

(文章末尾的解决方案)

考虑一个名为userFetch的查询,其定义如下:

type User_Details {
  phone_number: String
}

type User {
  name: String
  details: User_Details 
}
在数据库中获取具有以下数据的用户时,我没有子字段电话号码

//在数据库中
{
姓名:“乔”
}
通过GraphQL,我得到以下信息:

//响应
{
姓名:“乔”,
详细信息:空
}
当我期望:

//预期响应
{
姓名:“乔”,
详情:{
电话号码:空
}
}

如何使GraphQL保留子字段,即使所有子字段都为空?

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

谢谢你的提示和技巧;)


编辑:解决方案

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

在此之前,您必须知道,我已经围绕graphql构建了一个环境,它允许我做很多事情(比如获取类型的默认/空对象)。还没有开源

为了对数据库中保存的所有子属性强制执行响应,我创建了一个GraphQL中间件,该中间件将解析的数据与默认值/对象合并


通过这种方式,它是graphql端点上的一个简单附加组件,它取决于请求参数,允许我强制执行完整响应或最低限度的常见响应:)

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

{
  user {
    name
    details
  }
}
{
  name: "Joe",
  details: {
    phone_number: null
  }
}
const user={name:“Joe”};
您的查询如下所示:

{
  user {
    name
    details
  }
}
{
  name: "Joe",
  details: {
    phone_number: null
  }
}
GraphQL引擎无法了解用户的实际详细信息,因为详细信息为null(或未定义,这与此相同)。如果您希望发送非空的
user.details
您必须从某处获取它们。
具体地说,如果您希望您的响应如下所示:

{
  user {
    name
    details
  }
}
{
  name: "Joe",
  details: {
    phone_number: null
  }
}
您发送的用户必须如下所示:

{
  user {
    name
    details
  }
}
{
  name: "Joe",
  details: {
    phone_number: null
  }
}
const用户={
姓名:“乔”,
详情:{
电话号码:空
}
}

谢谢您的帮助。正如我在最初的帖子中所解释的那样,我已经解决了这个问题:)