【问题标题】:Graphql nested MutationGraphql 嵌套突变
【发布时间】:2019-08-24 19:23:38
【问题描述】:

我正在构建一个 Graphql 模式来变异/查询餐厅,并尝试将开放时间存储在嵌套对象中。

结构应如下所示:

        [
            { 
                monday: { open: restaurant.Open_Monday, close: restaurant.Close_Monday }

            },
            { 
                tuesday: { open: restaurant.Open_Tuesday, close: restaurant.Close_Tuesday }

            },
            { 
                wednesday: { open: restaurant.Open_Wednesday, close: restaurant.Close_Wednesday }

            },
            { 
                thursday: { open: restaurant.Open_Thursday, close: restaurant.Close_Thursday }

            },
            { 
                friday: { open: restaurant.Open_Friday, close: restaurant.Close_Friday }

            },
            { 
                saturday: { open: restaurant.Open_Saturday, close: restaurant.Close_Saturday }

            },
            { 
                sunday: { open: restaurant.Open_Sunday, close: restaurant.Close_Sunday }

            },
        ]

餐厅变量包含 I' 的营业时间值,在将它们发送到 API 并存储它们之前进行格式化。

我的 Graphql 架构如下所示:

input RestaurantInput {
    key: Int!
    name: String!
    image: String!
    telNumber: String!
    bookingNumber: String
    address1: String!
    address2: String
    suburb: String!
    province: String!
    postalCode: String
    days: [DayInput]
    cuisine: String
    exclusions: String
    restrictions: String
    breakfast: String
    lunch: String
    supper: String
    longitude: String
    latitude: String
}

input DayInput {
     monday: [TimeInput]
     tuesday: [TimeInput]
     wednesday: [TimeInput]
     tursday: [TimeInput]
     friday: [TimeInput]
     saturday: [TimeInput]
     sunday: [TimeInput]
}

input TimeInput {
     open: String
     close: String
}

当我点击该 API 端点时,我收到以下错误消息:

Expected type [DayInput], found "[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]".

我不确定我的调用是否格式不正确,或者我是否在架构本身中犯了错误。我对 Graphql 还是很陌生,并且坚持这一点。

【问题讨论】:

    标签: javascript api graphql schema


    【解决方案1】:

    您看到该错误是因为您的输入结构与您的架构不匹配。架构中的方括号 ([]) 表示一个列表——如果您将输入类型包装在方括号中,则相应的输入应该是一个数组。要获得与您显示的数组匹配的架构,您应该删除 TimeInput 周围的括号:

    input RestaurantInput {
      days: [DayInput]
      # other fields
    }
    
    input DayInput {
      monday: TimeInput
      tuesday: TimeInput
      wednesday: TimeInput
      thursday: TimeInput
      friday: TimeInput
      saturday: TimeInput
      sunday: TimeInput
    }
    
    input TimeInput {
      open: String
      close: String
    }
    

    但是,您也可以考虑完全简化此结构:

    input RestaurantInput {
      days: DayInput # <---- remove the List here
      # other fields
    }
    
    input DayInput {
      monday: TimeInput
      tuesday: TimeInput
      wednesday: TimeInput
      thursday: TimeInput
      friday: TimeInput
      saturday: TimeInput
      sunday: TimeInput
    }
    
    input TimeInput {
      open: String
      close: String
    }
    

    然后您可以只发送一个普通对象,而不使用数组:

    { 
      monday: { open: restaurant.Open_Monday, close: restaurant.Close_Monday },
      tuesday: { open: restaurant.Open_Tuesday, close: restaurant.Close_Tuesday },
      wednesday: { open: restaurant.Open_Wednesday, close: restaurant.Close_Wednesday },
      thursday: { open: restaurant.Open_Thursday, close: restaurant.Close_Thursday },
      friday: { open: restaurant.Open_Friday, close: restaurant.Close_Friday },
      saturday: { open: restaurant.Open_Saturday, close: restaurant.Close_Saturday },
      sunday: { open: restaurant.Open_Sunday, close: restaurant.Close_Sunday },
    },
    

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 2018-08-24
      • 2021-04-09
      • 2017-07-28
      • 2019-04-10
      • 2016-02-07
      • 2018-08-22
      • 2018-09-19
      相关资源
      最近更新 更多