Graphql嵌套Mutation

问题描述 投票:0回答:1

我正在构建一个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 }

            },
        ]

restaurant变量包含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个回答
1
投票

您看到该错误,因为输入的结构与您的架构不匹配。模式中的方括号([])表示List - 如果将输入类型包装在方括号中,则相应的输入应为数组。要使模式与您显示的数组匹配,您应该从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 },
},
© www.soinside.com 2019 - 2024. All rights reserved.