可选参数-Mutation-TypeGraphQL
我想更新可选参数-Mutation-TypeGraphQL,graphql,prisma-graphql,typegraphql,Graphql,Prisma Graphql,Typegraphql,我想更新概要文件实体的firstName和lastName 我希望用户能够更新这两个或其中一个。 但是我不知道如何进行变异,使参数(firstName和lastName)中的一个是可选的 我的当前代码如果用户同时输入firstName和lastName @Mutation(() => Boolean) @UseMiddleware(isAuth) async updateProfile( @Ctx() {payload}: MyContext, @Arg('fi
概要文件
实体的firstName
和lastName
我希望用户能够更新这两个或其中一个。
但是我不知道如何进行变异,使参数(firstName
和lastName
)中的一个是可选的
我的当前代码如果用户同时输入firstName
和lastName
@Mutation(() => Boolean)
@UseMiddleware(isAuth)
async updateProfile(
@Ctx() {payload}: MyContext,
@Arg('firstName') firstName: string,
@Arg('lastName') lastName: string,
) {
try {
const profile = await Profile.findOne({where: { user: payload!.userId}})
if (profile) {
profile.firstName = firstName
profile.lastName = lastName
await profile.save();
return true
}
return false
} catch(err) {
return false
}
}
如果我运行变异(不包括一个参数):
我得到一个错误:
“消息”:“字段”updateProfile“参数”lastName“类型为”String!“是必需的,但未提供
我原以为解决方法可以是在
@Arg
中传递一个默认参数,但后来我意识到默认参数是静态的,而不是动态的,因此我无法传递该特定配置文件的名字或姓氏
要使参数可选,请将第二个参数传递给@Arg
dec我是这样说的:
@Arg('firstName', { nullable: true }) firstName: string,
@Arg('lastName', { nullable: true }) lastName: string,
在GraphQL中,参数要么是必需的,要么不是。没有办法指定“只需要这些参数中的一个”“。如果您需要这种验证逻辑,您需要自己在解析器中实现它。谢谢。您是否建议为每个参数创建一个变异?一个用来更新firstName
,另一个用来更新lastName
?这能解决问题吗?我担心的是,如果我沿着这条路走,我会有太多的突变。这真的取决于你的用例。不过,根据经验,最好有更细粒度的查询和突变,以便将它们的意图更清楚地传达给任何使用它们的人。
@Arg('firstName', { nullable: true }) firstName: string,
@Arg('lastName', { nullable: true }) lastName: string,