突变-对象文字中的GraphQL嵌套节点只能指定已知属性和';天';类型中不存在

突变-对象文字中的GraphQL嵌套节点只能指定已知属性和';天';类型中不存在,graphql,aws-amplify-cli,amplify,Graphql,Aws Amplify Cli,Amplify,我的模式的总体结构如下: 一个例行程序可以有多天 一天可以有多种锻炼 我有一个由AWS Amplify CLI生成的GraphQL突变 突变如下所示: export const createRoutine = /* GraphQL */ ` mutation CreateRoutine( $input: CreateRoutineInput! $condition: ModelRoutineConditionInput ) { createRoutine(in

我的模式的总体结构如下:

  • 一个例行程序可以有多天
  • 一天可以有多种锻炼
我有一个由AWS Amplify CLI生成的GraphQL突变

突变如下所示:

export const createRoutine = /* GraphQL */ `
  mutation CreateRoutine(
    $input: CreateRoutineInput!
    $condition: ModelRoutineConditionInput
  ) {
    createRoutine(input: $input, condition: $condition) {
      id
      name
      description
      days {
        items {
          id
          routineID
          name
          description
          exercises {
            items {
              id
              dayID
              name
              description
              reps
              sets
            }
          }
        }
      }
    }
  }
`;
const inp = {
      id: id,
      name: "Test Routine Dynamic",
      description: "Description for TRD",
      days: {
        items: {
          id: id,
          routineID: id,
          name: "Day 1 of TRD",
          description: "Description for Day 1 of TRD",
          exercises: {
            items: {
              id: id,
              dayID: id,
              name: "Bench Press",
              description: "Push the bar",
              reps: "3",
              sets: "5",
            },
          },
        },
      },
export type CreateRoutineInput = {
  id?: string | null,
  name: string,
  description?: string | null,
};
当我去做这样的GraphQL突变时:

export const createRoutine = /* GraphQL */ `
  mutation CreateRoutine(
    $input: CreateRoutineInput!
    $condition: ModelRoutineConditionInput
  ) {
    createRoutine(input: $input, condition: $condition) {
      id
      name
      description
      days {
        items {
          id
          routineID
          name
          description
          exercises {
            items {
              id
              dayID
              name
              description
              reps
              sets
            }
          }
        }
      }
    }
  }
`;
const inp = {
      id: id,
      name: "Test Routine Dynamic",
      description: "Description for TRD",
      days: {
        items: {
          id: id,
          routineID: id,
          name: "Day 1 of TRD",
          description: "Description for Day 1 of TRD",
          exercises: {
            items: {
              id: id,
              dayID: id,
              name: "Bench Press",
              description: "Push the bar",
              reps: "3",
              sets: "5",
            },
          },
        },
      },
export type CreateRoutineInput = {
  id?: string | null,
  name: string,
  description?: string | null,
};
我从IDE中得到一个错误,它说: 对象文字只能指定已知属性,类型中不存在“天”

因为输入类型是
CreateRoutineInput
,如下所示:

export const createRoutine = /* GraphQL */ `
  mutation CreateRoutine(
    $input: CreateRoutineInput!
    $condition: ModelRoutineConditionInput
  ) {
    createRoutine(input: $input, condition: $condition) {
      id
      name
      description
      days {
        items {
          id
          routineID
          name
          description
          exercises {
            items {
              id
              dayID
              name
              description
              reps
              sets
            }
          }
        }
      }
    }
  }
`;
const inp = {
      id: id,
      name: "Test Routine Dynamic",
      description: "Description for TRD",
      days: {
        items: {
          id: id,
          routineID: id,
          name: "Day 1 of TRD",
          description: "Description for Day 1 of TRD",
          exercises: {
            items: {
              id: id,
              dayID: id,
              name: "Bench Press",
              description: "Push the bar",
              reps: "3",
              sets: "5",
            },
          },
        },
      },
export type CreateRoutineInput = {
  id?: string | null,
  name: string,
  description?: string | null,
};
为什么生成的CreateRoutineInput类型不允许我指定嵌套项“天”? 我对GraphQL有点陌生,所以也许这是不应该做的事情


非常感谢您的帮助,谢谢。

好的,我想我找到了解决方案,希望将来如果有人偶然发现这条线索,这可能会有所帮助:

问题实际上是我的模式。我设置它的方式是,每个“对象”都是一个@model。我认为这实际上意味着它们都有各自的auth规则和自己的表。但不是100%确定

我其实并不需要把它们分开,因为它们都是有等级关系的

因此,我的模式看起来像这样:

type Routine
  @model
  @auth(...) {
  id: ID!
  name: String!
  description: String
  days: [Day]! @connection(keyName: "byRoutine", fields: ["id"])
}

# day = post
type Day
  @model
  @key(name: "byRoutine", fields: ["routineID"])
  @auth(...) {
  id: ID!
  routineID: ID!
  name: String
  description: String
  exercises: [Exercise] @connection(keyName: "byDay", fields: ["id"])
}

type Exercise
  @model
  @key(name: "byDay", fields: ["dayID"])
  @auth(...) {
  id: ID!
  dayID: ID!
  name: String!
  description: String
  reps: String!
  sets: String!
}

如您所见,它们都被标记为@model。 因此,在多次尝试之后,我只是从嵌套类型中删除了所有标记,并使它们成为类型。然后,它们被简单地用作父类型字段的类型

现在看起来是这样的:

type Routine
  @model
  @auth(...) {
  id: ID!
  name: String!
  description: String
  days: [Day]!
}

type Day {
  id: ID!
  routineID: ID!
  name: String
  description: String
  exercises: [Exercise]
}

type Exercise {
  id: ID!
  dayID: ID!
  name: String!
  description: String
  reps: String!
  sets: String!
}
而且它有效!现在我可以创建嵌套突变。现在看起来是这样的:

希望这能帮助你,如果你被卡住了!当我修好它的时候,我松了一口气