嵌套对象的 Hasura GraphQL UPSERT 突变
Posted
技术标签:
【中文标题】嵌套对象的 Hasura GraphQL UPSERT 突变【英文标题】:Hasura GraphQL UPSERT mutation for nested objects 【发布时间】:2021-05-08 05:00:22 【问题描述】:因此,我正在尝试使用变量构建一个突变,用于将“人员”的记录及其地址、电子邮件、电话信息插入/更新到多个表中。
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": "FirstLastName@email.com"
]
这工作符合我的预期(电子邮件数组中也有多个值),但我还需要将 f_name 和 l_name 值(整个 Person 对象)移动到一个变量中。我如何做到这一点?
我以这种方式尝试了以下突变,但这导致两个单独的插入和空值被传递...
mutation insertPerson ($person: person_insert_input!, $address: [adr_insert_input!]!)
insertData(objects: [
$person,
address: data: $address
]) affected_rows
这导致了两个单独的插入...第一个人的地址为空,然后人的地址为空。
如何实现第一个突变的结果,同时使用 Person Info 作为变量的一部分不将其硬编码到查询本身中?
谢谢!
【问题讨论】:
【参考方案1】:您需要将 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: "FirstLastName@email.com"
],
on_conflict:
constraint: person_id_pk,
update_column: [email_text]
]
【讨论】:
谢谢,这确实有效......我遇到了类似的事情,但希望在没有 on_conflict 的情况下构建变量(因为这很难从应用程序动态构建)跨度>以上是关于嵌套对象的 Hasura GraphQL UPSERT 突变的主要内容,如果未能解决你的问题,请参考以下文章