如何更新 AWS Amplify 中的嵌套信息以响应本机?
How can you update nested information in AWS Amplify for react native?
我在 graphql 中有嵌套模式,我正在尝试使用 amplify 创建的更新函数来更新模式的嵌套部分,以获取特定的信息 ID。我有 table 的 ID,我想更新并想更新 hasBooks 部分。尝试使用我当前的代码时,我遇到了两个错误,具体取决于我尝试的内容:
"The variables input contains a field name 'hasBooks' that is not defined for input object type 'UpdateInformationInput' "
和
"Variable 'input' has coerced Null value for NonNull type 'UpdateInformationInput!'"
架构:
type Information @model @searchable{
id: ID!
firstName: String!
lastName: String!
phoneNumber: Int
password: Int
timestamp:String!
hasBooks: [Books] @connection (name:"InformationBooks")
}
type Books @model {
id: ID!
firstName: String!
lastName: String!
title: String!
information: Information @connection
(name:"InformationBooks")
}
export const updateInformation = /* GraphQL */ `
mutation UpdateInformation(
$input: UpdateInformationInput!
$condition: ModelInformationConditionInput
) {
updateInformation(input: $input, condition: $condition) {
id
firstName
lastName
phoneNumber
password
timestamp
hasBooks {
items {
id
firstName
lastName
title
}
nextToken
}
}
}
代码:
const initialState = {
firstName: '',
lastName: '',
title:''
}
const [formState, setFormState] = useState(initialState)
const [contactInfos, setContactInfos] = useState([])
async function addContactInfo() {
try {
const contactInfo = { ...formState }
setContactInfos([...contactInfos, contactInfo])
await API.graphql(graphqlOperation(updateInformation,
{input: { hasBooks: contactInfo, id:caseID}}))
} catch (err) {
console.log('error creating todo:', err)
}
}
需要一个带有@key的一对多@connection
type Information @model @searchable {
id: ID!
firstName: String!
lastName: String!
phoneNumber: Int
password: Int
timestamp:String!
books: [Books] @connection (keyName:"byInformation", fields:["id"])
}
type Books @model
@key (name:"byInformation", fields:["informationID"]) {
id: ID!
informationID:ID!
firstName: String!
lastName: String!
title: String!
}
然后通过以下方式创建信息:
const initialState = {
firstName: '',
lastName: '',
title:'',
informationID: caseID
}
const [contactInfos, setContactInfos] = useState([])
async function addContactInfo() {
try {
const contactInfo = { ...formState }
setContactInfos([...contactInfos, contactInfo])
await API.graphql(graphqlOperation(createBooks, {input:
contactInfo}))
} catch (err) {
console.log('error creating todo:', err)
}
}
我在 graphql 中有嵌套模式,我正在尝试使用 amplify 创建的更新函数来更新模式的嵌套部分,以获取特定的信息 ID。我有 table 的 ID,我想更新并想更新 hasBooks 部分。尝试使用我当前的代码时,我遇到了两个错误,具体取决于我尝试的内容:
"The variables input contains a field name 'hasBooks' that is not defined for input object type 'UpdateInformationInput' "
和
"Variable 'input' has coerced Null value for NonNull type 'UpdateInformationInput!'"
架构:
type Information @model @searchable{
id: ID!
firstName: String!
lastName: String!
phoneNumber: Int
password: Int
timestamp:String!
hasBooks: [Books] @connection (name:"InformationBooks")
}
type Books @model {
id: ID!
firstName: String!
lastName: String!
title: String!
information: Information @connection
(name:"InformationBooks")
}
export const updateInformation = /* GraphQL */ `
mutation UpdateInformation(
$input: UpdateInformationInput!
$condition: ModelInformationConditionInput
) {
updateInformation(input: $input, condition: $condition) {
id
firstName
lastName
phoneNumber
password
timestamp
hasBooks {
items {
id
firstName
lastName
title
}
nextToken
}
}
}
代码:
const initialState = {
firstName: '',
lastName: '',
title:''
}
const [formState, setFormState] = useState(initialState)
const [contactInfos, setContactInfos] = useState([])
async function addContactInfo() {
try {
const contactInfo = { ...formState }
setContactInfos([...contactInfos, contactInfo])
await API.graphql(graphqlOperation(updateInformation,
{input: { hasBooks: contactInfo, id:caseID}}))
} catch (err) {
console.log('error creating todo:', err)
}
}
需要一个带有@key的一对多@connection
type Information @model @searchable {
id: ID!
firstName: String!
lastName: String!
phoneNumber: Int
password: Int
timestamp:String!
books: [Books] @connection (keyName:"byInformation", fields:["id"])
}
type Books @model
@key (name:"byInformation", fields:["informationID"]) {
id: ID!
informationID:ID!
firstName: String!
lastName: String!
title: String!
}
然后通过以下方式创建信息:
const initialState = {
firstName: '',
lastName: '',
title:'',
informationID: caseID
}
const [contactInfos, setContactInfos] = useState([])
async function addContactInfo() {
try {
const contactInfo = { ...formState }
setContactInfos([...contactInfos, contactInfo])
await API.graphql(graphqlOperation(createBooks, {input:
contactInfo}))
} catch (err) {
console.log('error creating todo:', err)
}
}