Hasura:如何在隐式设置其父项的外键的同时添加新的详细信息行?

Hasura: How can I add a new detail row while implicitly setting up the foreign key to its parent?

我正在尝试将一个新的子行插入到 Hasura 中 1:M 关系的 "many" 端,但我希望不必显式分配外键 ID。

我在这里看到了如何同时插入子项和新父项的示例,但我正在尝试插入一个新的子行并将其指向一个 现有 parent 而不必显式指定id。

下面的 SQL 说明了我正在尝试做的事情。有没有办法使用 hasura 生成的 gql 解析器复制这种效果?

假设

INSERT INTO foo (type) VALUES
    ( 'red' ),
    ( 'green' ),
    ( 'blue' );

我怎么能

INSERT INTO bar (description, foo_id) VALUES
    ( 'testing',     (SELECT id from foo WHERE type='blue') ),
    ( 'another row', (SELECT id from foo WHERE type='red' ) );

将 GQL 语法与 hasura 生成的解析器一起使用?

根据您的应用程序的具体情况(尤其是权限限制),可以利用 upsert 突变 - https://hasura.io/docs/1.0/graphql/manual/mutations/upsert.html

这是一个示例,问题中指定了数据模型:

mutation Test {
  insert_foo_one(
    object: {
      type: "blue", 
      bars: {
        data: [
          { description: "testing" }
        ]
      }
    }, 
    on_conflict: {
      constraint: foo_type_key, # added this constraint
      update_columns: type, 
      where: {type: {_eq: "blue"}}
    }
  ) {
    id
    type
    bars {
      description
      id
    }
  }
}

没有提及 id,除了在响应中(也可以省略)。可以动态构造并传入类型 "blue"、"red" 等和描述。似乎不可能同时为两个不同的 foo 值执行 1 插入。

另一种选择可能是使用自定义操作 - https://hasura.io/docs/1.0/graphql/manual/actions/index.html