graphql - 嵌套对象的 Hasura GraphQL UPSERT 突变

标签 graphql hasura

因此,我尝试构建一个突变,使用变量将“人”的记录及其地址、电子邮件、电话信息插入/更新到多个表中。

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/

相关文章:

java - GraphQL with Java - 如何将解析器分成多个类

java - GraphQL 和 Zuul : WIll Graphql work as an rest endpoint with zuul as api gateaway

postgresql - "variable invitationId of type Int! is used in position expecting Int_comparison_exp"

javascript - 如何使用node.js GOT http请求库进行故障排除?

graphql - 如何使用Graphql动态更新一张表中的多行

reactjs - TypeError : Cannot read property 'getPosts' of undefined - useQuery hook, react 功能组件

reactjs - 为什么我们不能仅将 GraphQL 与 Redux 结合使用

graphql - 如何在GraphQL查询中使用distinct?

ios - 无法连接到 Hasura PostGreSQL docker 容器的网络套接字

firebase - 无法使用 Firebase jwt token 访问 hasura