0

我使用 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 通过。

谢谢!

4

1 回答 1

0

我建议你设计你的模式,这样一开始就不能输入错误的数据。您可以在表上放置部分唯一索引,feed以防止创建重复的提要。由于您同时拥有用户和组,因此您可以使用 2 个部分索引来实现它。

CREATE UNIQUE INDEX unique_feed_per_user ON feed (user_id)
    WHERE user_id IS NOT NULL;

CREATE UNIQUE INDEX unique_feed_per_group ON feed (group_id)
    WHERE group_id IS NOT NULL;
于 2021-10-13T21:09:19.113 回答