使用Appsync更新GraphQL中的突变
我对react native和amplify的更新突变有问题使用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"
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中有多个列,而您只想更新一个列值,该怎么办。现在,对于更新单列值,我将传递所有其他列值。是否有任何方法可以只更新给定的键值。