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
我正在尝试将一个新的子行插入到 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