Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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
使用Appsync更新GraphQL中的突变_Graphql_Aws Amplify_Aws Appsync - Fatal编程技术网

使用Appsync更新GraphQL中的突变

使用Appsync更新GraphQL中的突变,graphql,aws-amplify,aws-appsync,Graphql,Aws Amplify,Aws Appsync,我对react native和amplify的更新突变有问题 addProfileDetails = async (sub) => { let UserDetails = await API.graphql(graphqlOperation(mutations.updatePeople, {updatePeopleInput: { UserID: sub, Organization: "Organization"

我对react native和amplify的更新突变有问题

addProfileDetails = async (sub) => {
    let UserDetails = await API.graphql(graphqlOperation(mutations.updatePeople, {updatePeopleInput: 
         {
            UserID: sub,
            Organization: "Organization"
            Name: "name"
        }
    }));
    console.log(UserDetails);
  };
这段代码不会生成任何错误,它与我最初创建记录时使用的代码基本相同

但它返回这些数据,实际上并没有按预期更新记录

Object {
  "data": Object {
    "updatePeople": null,
  },
}
我在appsync查询编辑器上测试了此查询:

mutation update {
  updatePeople (updatePeopleInput: {
    PersonID: "XXXXXXXXXXXXXXXXXXXXXXXXXX",
    Gender: "Male"
  })
    {
    PersonID
    Gender
  }
}
它返回相同的值。创建变异工作,查询工作。我不明白这里发生了什么

任何关于我做错了什么的见解都会有帮助。另外,如果您需要模式或变异代码,我可以提供。

我已经解决了这个问题

结果表明,Appsync创建的默认解析程序无法对我的RDS进行更新

我通过更改请求解析程序解决了此问题:

#set( $updateList = {} )
#foreach( $entry in $ctx.args.updatePeopleInput.keySet() )
  #set( $discard = $updateList.put($entry, "'$ctx.args.updatePeopleInput[$entry]'") )
#end
#set( $update = $updateList.toString().replace("{","").replace("}","") )
{
  "version": "2018-05-29",
  "statements":   [
    $util.toJson("UPDATE People SET Gender='$ctx.args.updatePeopleInput.Gender', Username='$ctx.args.updatePeopleInput.Username' WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'"),
    $util.toJson("SELECT * FROM People WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'")
    ]
}
在此之前:

#set( $updateList = {} )
#foreach( $entry in $ctx.args.updatePeopleInput.keySet() )
  #set( $discard = $updateList.put($entry, "'$ctx.args.updatePeopleInput[$entry]'") )
#end
#set( $update = $updateList.toString().replace("{","").replace("}","") )
{
  "version": "2018-05-29",
  "statements":   [
    $util.toJson("UPDATE People SET $update WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'"),
    $util.toJson("SELECT * FROM People WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'")
    ]
}

显然,$update不起作用,您必须显式地命名要设置的变量。

那么,如果db中有多个列,而您只想更新一个列值,该怎么办。现在,对于更新单列值,我将传递所有其他列值。是否有任何方法可以只更新给定的键值。