Hasura:如何在插入时建立与现有记录(多对多)的关系?

Hasura: How to establish relationship to existing record (many to many) at insert time?

Hasura:如何在插入时建立与现有记录(多对多)的关系?

我有两个 table:产品和类别根据每个 table 中的一个 id 列和一个中介在多对多关系中相互 linked table product_category.

我可以使用 product_category 将 tables 和 link 的记录直接插入到 postgres 中,这在 Hasura 中非常适合查询,所以我知道我已经正确设置了.

我想要做的是插入一个新产品并知道我想在插入时建立关系的一个(或多个)类别的 ID。最好不要单独调用

https://hasura.io/docs/1.0/graphql/manual/mutations/insert.html#insert-an-object-along-with-its-related-objects-through-relationships

文档只介绍了同时插入对象和相关对象,但如果另一个已经存在怎么办?

我已经尝试了我期望的工作(link将此产品归入 ID 为 1 的类别):

mutation MyMutation {
  insert_product_one(
    object: {
      name: "Champion", 
      category: {data: {id: 1}}
    }) {
    id
  }
}

但是抛出:

"Not-NULL violation. null value in column \"product_id\" 违反非空约束"

如何插入此新产品并将其 link 放入一个或多个类别?最好是在一个语句中,但即使是检索生成的 id 和更新突变的示例也不理想,但至少是一个解决方案。

更新:作为完整性检查,我重新创建了产品和类别 tables 作为最小的基本示例,并尝试了我的查询和 xadm 建议的更新插入冲突方法。

数据和关系我在这里添加了一些截图:

https://imgur.com/a/GUomMbe

mutation MyMutation {
  insert_testproduct_one(
    object: {
      name: "Champion", 
      category: {
          data: {id: 1},
          on_conflict: { constraint: primarykeything , update_columns: [id] }
    }
    }) {
    id
  }
}

错误类似:"Not-NULL violation. null value in column \"testcategory_id\" violates not-null constraint"

注意:primarykeything是桥table上的主键,由两个id组成。

由于这是多对多关系,因此您在它们之间有一个连接 table。从我在屏幕截图中看到的内容来看,您在类别关系中发布的类别 ID 称为 testcategory_id 而不是 id

mutation MyMutation {
  insert_testproduct_one(
    object: {
      name: "Champion", 
      category: {
          data: {testcategory_id: 1}
    }
    }) {
    id
  }
}

要使 table testproduct_testcategory 中的 id 必须自动递增