【问题标题】:How to upsert nested tables values in Hasura GraphQL?如何在 Hasura GraphQL 中插入嵌套表值?
【发布时间】:2020-10-08 13:14:05
【问题描述】:

想问是否可以插入嵌套对象?例如,如果我有一个“用户”表和一个“学生”表,并且我正在插入一个新用户(带有已获取的 id),我想更新所有字段(使用 on_conflict 和 update_columns),包括“学生”表。 基本上替换除了主键之外的所有用户字段。

mutation($UsersData: [core_users_insert_input!]!) {
    insert_core_users(
      objects: $UsersData
      on_conflict: {
        constraint: core_users_id_unique
        update_columns: [first_name, last_name, gender]
      }
    ) {
      affected_rows
    }
  }

update_column 数组应该包含“Students”表中的字段,但我不知道。

【问题讨论】:

    标签: graphql hasura


    【解决方案1】:

    有可能,相关文档在这里:https://hasura.io/docs/1.0/graphql/manual/mutations/upsert.html#upsert-in-nested-mutations

    可以在要解决更新现有记录的任何级别(顶部或嵌套)上使用 on_conflict 键。

    mutation upsert_author_article {
      insert_author(
        objects: [
          {
            name: "John",
            articles: {
              data: [
                {
                  title: "Article 3",
                  content: "Article 3 content"
                }
              ],
              on_conflict: {
                constraint: article_title_key,
                update_columns: [content]
              }
            }
          }
        ]
      ) {
        affected_rows
      }
    }
    

    【讨论】:

    • 我的意思是,当“作者”表的约束被破坏时,是否可以编辑“文章”表。
    • 这可能是可能的(但不确定我是否完全按照您的示例 - 请指定架构和所需的请求更多) - 因为您可以在作者冲突上设置 update_columns: [],然后继续更新嵌套数据(文章)如果存在另一个冲突,您可以通过在数据有效负载中提交与主键约束冲突的主键来强制。更多信息:hasura.io/docs/1.0/graphql/manual/mutations/…
    猜你喜欢
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多