Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可选参数-Mutation-TypeGraphQL_Graphql_Prisma Graphql_Typegraphql - Fatal编程技术网

可选参数-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,