首页 文章

在graphql中嵌套片段

提问于
浏览
0

我在我的graphql查询中尝试 nest 片段(无递归或无限扩展) . 但是,graphql架构不会将我的查询视为有效,或者片段定义似乎是多余的 . 我想要的graphql响应结构是:

`
{  
    "data":{  
        "availability":{  
            "mon":{  
                "open":"5.00 a.m.",
                "close":"10.00 p.m.",
                "allday":false,
                "closed":false
            },
            "tue":{  
                "open":"5.00 a.m.",
                "close":"10.00 p.m.",
                "allday":false,
                "closed":false
            },
            "wed":{  
                "open":"5.00 a.m.",
                "close":"10.00 p.m.",
                "allday":false,
                "closed":false
            },
            "thu":{  
                "open":"5.00 a.m.",
                "close":"10.00 p.m.",
                "allday":false,
                "closed":false
            },
            "fri":{  
                "open":"5.00 a.m.",
                "close":"10.00 p.m.",
                "allday":false,
                "closed":false
            },
            "sat":{  
                "open":"5.00 a.m.",
                "close":"10.00 p.m.",
                "allday":false,
                "closed":false
            },
            "sun":{  
                "open":"5.00 a.m.",
                "close":"10.00 p.m.",
                "allday":false,
                "closed":false
            }
        }
    }
}
`

可用性的类型为 Availability ,mon,tue等的类型为 Day

方法1:这不是graphql中的有效语法 . graphql抛出错误(不允许以这种方式嵌套)

`
fragment Hours on Day {
    open
    close
    allday
    closed
}

fragment DailyAvailability on Availability {
    mon 
    tue 
    wed 
    thu 
    fri 
    sat 
    sun
}

query {
    availability {
        ... DailyAvailability {
            ... Hours
        }
    }
}
`

方法2:这是有效的,但似乎是多余的,因为我必须分别在每一天传播时间 .

`
fragment Hours on Day {
    open
    close
    allday
    closed
}

fragment DailyAvailability on Availability {
    mon {... Hours}
    tue {... Hours}
    wed {... Hours}
    thu {... Hours}
    fri {... Hours}
    sat {... Hours}
    sun {... Hours}
}

query {
    availability {
        ... DailyAvailability
    }
}
`

请建议我是否有办法在我的第一种方法中嵌套片段 .

1 回答

  • 0

    这看起来像是要使用带有“别名”的字段请求 . 您的架构看起来像:

    type QueryRoot {
      availability: Availability
    }
    
    type Availability {
      openingHours(forDay: WeekDay): Day
    }
    
    enum WeekDay {
      mon 
      tue 
      wed 
      thu 
      fri 
      sat 
      sun
    }
    
    type Day {
      open: String
      close: String
      allday: Boolean
      closed: Boolean
    }
    

    然后这个查询会给你你要求的内容:

    query q {
      availability {
        mon: openingHours(forDay: mon) { ... DailyAvailability }
        tue: openingHours(forDay: tue) { ... DailyAvailability }
        wed: openingHours(forDay: wed) { ... DailyAvailability }
        thu: openingHours(forDay: thu) { ... DailyAvailability }
        fri: openingHours(forDay: fri) { ... DailyAvailability }
        sat: openingHours(forDay: sat) { ... DailyAvailability }
        sun: openingHours(forDay: sun) { ... DailyAvailability }
      }
    }
    fragment DailyAvailability on Day {
      open
      close
      allday
      closed
    }
    

相关问题