【发布时间】:2021-12-01 22:01:57
【问题描述】:
我使用 Hasura,我有类似社交网络的情况。
其中我有一个“用户”对象和一个“提要”对象。
每个用户都有一个提要。
我的关系从 user.id 到 feed.id。
相关突变为UpsertUserDetails,如下:
mutation UserDetailsUpsert(
$email: String!
$picture: String
) {
insert_users_one(
object: {
email: $email
feed: { data: {} }
picture: $picture
}
on_conflict: { constraint: users_tid_email_key, update_columns: [picture] }
) {
id
}
}
所以当我创建一个新用户时,它也会为它创建一个提要。
但是当我只更新用户详细信息时,我不希望它创建新的提要。 我想阻止 upsert 进入关系而不是上述默认行为。
根据本手册,我看不出它是否可能:https://hasura.io/docs/latest/graphql/core/databases/postgres/mutations/upsert.html#upsert-in-nested-mutations
要允许在嵌套情况下进行更新插入,请设置 update_columns: []。通过这样做,在发生冲突的情况下,冲突的列将被更新为新值(这与它们之前的值相同,因此将有效地保持它们不变),并将允许 upsert 通过。
谢谢!
【问题讨论】:
-
是否存在用户应该能够拥有多个提要的情况?您是否考虑过在提要表内的
user_id列上设置唯一约束以防止这种情况发生? -
这对我来说是个问题,因为提要也可以用于
Groups,因此需要将通用 ID 字段限制在两个表上。有可能吗?
标签: postgresql graphql hasura graphql-mutation