我的申请有误。我使用 Next.js / ApolloClient / GraphQL 和 Prisma。该错误涉及 GraphQL 模式,它在
Mutation
中使用:
错误:原因:“end_date”字段“end_date”未在 输入类型ArticleCreateInput
我试图在每个文件上复制/粘贴全局模式以获得良好的对应数据,但它不起作用。
我的数据模型(datamodel.prisma):
type Article {
id: ID! @id
title: String!
description: String!
createdAt: DateTime! @createdAt
updatedAt: DateTime! @updatedAt
image: String
maxUserNumber: Int!
greatImage: String
street: String!
begin_date: DateTime!
end_date: DateTime!
price: Int!
user: User!
}
我的架构.graphql:
createArticle(
title: String!
description: String!
image: String
maxUserNumber: Int!
greatImage: String
street: String!
begin_date: DateTime!
end_date: DateTime!
price: Int!
): Article!
在我生成的文件(prisma.graphql)中:
input ArticleCreateInput {
id: ID
title: String!
description: String!
image: String
maxUserNumber: Int
greatImage: String
street: String
begin_date: DateTime
end_date: DateTime
price: Int!
user: UserCreateOneInput!
}
客户端突变和状态:
const CREATE_ARTICLE_MUTATION = gql`
mutation CREATE_ARTICLE_MUTATION(
$title: String!
$description: String!
$image: String
$maxUserNumber: Int!
$greatImage: String
$street: String!
$begin_date: DateTime!
$end_date: DateTime!
$price: Int!
) {
createArticle(
title: $title
description: $description
image: $image
maxUserNumber: $maxUserNumber
greatImage: $greatImage
street: $street
begin_date: $begin_date
end_date: $end_date
price: $price
) {
id
}
}
`;
export class CreateArticle extends Component {
state = {
adresse: "",
title: "",
description: "",
image: "",
greatImage: "",
price: 0,
nbPersons: 2,
loadigImg: false,
begin_date: moment(new Date(Date.now())).format("YYYY-MM-DD"),
end_date: moment(new Date(Date.now()))
.add(1, "days")
.format("YYYY-MM-DD")
};
随着突变调用:
<Mutation
mutation={CREATE_ARTICLE_MUTATION}
variables={{
...this.state,
maxUserNumber: this.state.nbPersons,
street: this.state.adresse
}}
>
后端突变:
async createArticle(parent, args, ctx, info) {
if (!ctx.request.userId) {
throw new Error("Vous devez être connecté");
}
const article = await ctx.db.mutation.createArticle(
{
data: {
user: {
connect: {
id: ctx.request.userId
}
},
...args
}
},
info
);
return article;
},
当我使用我的 createArticle 突变时,我有一个指定的错误:
原因“end_date”字段未在类型中定义 文章创建输入
但是,当我在我的突变上记录参数时,我拥有所有字段!
据我所知,这是一个 graphql 运行时问题,因此请尝试暂时用字符串或数字替换 DateTime 类型(如果您依赖纪元)。一个可能的问题是您正在使用这个非标准的 DateTime 标量,这意味着您需要一个解析器来转换这个 自定义类型,阿波罗将使用它来序列化它。如果由于某种原因这个转换器坏了,它可能会返回 null 或 undefined 这会产生你所拥有的错误。
根据错误消息,您似乎忘记将Article模型与另一个相关模型一起引用。在 Prisma 中,您可以使用类似的东西:references: [id] 在 GraphCMS 中,在右上角的Add Field 菜单中找到Reference 按钮。