Graphql 如何在数据库(而不是对象)中检索属性的所有子属性(即使其值为null)?
(文章末尾的解决方案) 考虑一个名为userFetch的查询,其定义如下:Graphql 如何在数据库(而不是对象)中检索属性的所有子属性(即使其值为null)?,graphql,graphql-js,Graphql,Graphql Js,(文章末尾的解决方案) 考虑一个名为userFetch的查询,其定义如下: type User_Details { phone_number: String } type User { name: String details: User_Details } 在数据库中获取具有以下数据的用户时,我没有子字段电话号码 //在数据库中 { 姓名:“乔” } 通过GraphQL,我得到以下信息: //响应 { 姓名:“乔”, 详细信息:空 } 当我期望: //预期响应 { 姓名:
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用户={
姓名:“乔”,
详情:{
电话号码:空
}
}
谢谢您的帮助。正如我在最初的帖子中所解释的那样,我已经解决了这个问题:)