突变-对象文字中的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
- 一个例行程序可以有多天
- 一天可以有多种锻炼
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!
}
而且它有效!现在我可以创建嵌套突变。现在看起来是这样的:
希望这能帮助你,如果你被卡住了!当我修好它的时候,我松了一口气