因此,我尝试构建一个突变,使用变量将“人”的记录及其地址、电子邮件、电话信息插入/更新到多个表中。
mutation insertPerson ($address: [adr_insert_input!]!, $emails: [emails_insert_input!]!) {
insert_info(objects: [{
f_name: "User1",
l_name: "Test"
address: {
data: $address,
on_conflict: {
constraint: person_id_pk,
update_column: [add_text_line1, zip_code]
}
},
emails: {
data: $emails,
on_conflict: {
constraint: person_id_pk,
update_column: [email_text]
}
}
}], on_conflict: {
constraints: person_pk,
update_columns: [f_name, l_name]
}) {
affected_rows
}
}
我的变量设置如下...
{
"address": [{
"add_text_line1": "123 Main Street",
"zip_code": 50501
}],
"emails": [{
"email_text": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="581e312a2b2c14392b2c1639353d183d35393134763b3735" rel="noreferrer noopener nofollow">[email protected]</a>"
}]
}
这工作符合我的预期(电子邮件数组中也有多个值),但我还需要将 f_name 和 l_name 值(整个 Person 对象)移动到变量中。我如何实现这一目标?
我以这种方式尝试了以下突变,但这导致了两个单独的插入和传递空值...
mutation insertPerson ($person: person_insert_input!, $address: [adr_insert_input!]!){
insertData(objects: [
$person,
{
address: { data: $address }
}
]) { affected_rows }
}
这导致了两个单独的插入...第一个地址为空的人,然后地址为空的人。
如何实现第一个突变的结果,同时使用人员信息作为变量的一部分不将其硬编码到查询本身中?
谢谢!
最佳答案
您需要将 insert_info 对象作为变量传递
mutation insertPerson ($info_objects: [insert_info_insert_input!]!) {
insert_info(objects: $info_objects, on_conflict: {
constraints: person_pk,
update_columns: [f_name, l_name]
}) {
affected_rows
}
}
你的变量将是 info_objects 的数组
{info_objects: [{
f_name: "User1",
l_name: "Test"
address: {
data: [{
"add_text_line1": "123 Main Street",
"zip_code": 50501
}]
},
on_conflict: {
constraint: person_id_pk,
update_column: [add_text_line1, zip_code]
}
},
emails: {
data: [{
email_text: "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3b7d5249484f775a484f755a565e7b5e565a525715585456" rel="noreferrer noopener nofollow">[email protected]</a>"
}],
on_conflict: {
constraint: person_id_pk,
update_column: [email_text]
}
}
}]}
关于graphql - 嵌套对象的 Hasura GraphQL UPSERT 突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66036395/