【问题标题】:Hasura GraphQL UPSERT mutation for nested objects嵌套对象的 Hasura GraphQL UPSERT 突变
【发布时间】: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 作为变量的一部分将其硬编码到查询本身中?

谢谢!

【问题讨论】:

    标签: graphql hasura


    【解决方案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 的情况下构建变量(因为这很难从应用程序动态构建)跨度>
    猜你喜欢
    • 2021-12-01
    • 2020-04-05
    • 2020-11-06
    • 2019-08-24
    • 2020-04-24
    • 2018-08-24
    • 2021-04-09
    • 1970-01-01
    • 2018-01-02
    相关资源
    最近更新 更多