Hasura GraphQL嵌套Upsert变更发生冲突时如何停止关联嵌套操作?
你可以给嵌套的 Feed 插入操作添加 on_conflict 配置,让 Feed 插入发生冲突时不执行任何写入操作,就能满足「新建用户同步创建 Feed、更新用户时不修改/新增 Feed」的需求。
修改后的 Mutation 示例
mutation UserDetailsUpsert( $email: String! $picture: String ) { insert_users_one( object: { email: $email feed: { data: {}, # 新增嵌套的冲突处理规则 on_conflict: { constraint: feed_pkey, # 替换为你 Feed 表主键对应的实际约束名 update_columns: [] # 空数组代表冲突时不更新任何字段,无实际写入操作 } } picture: $picture } on_conflict: { constraint: users_tid_email_key, update_columns: [picture] } ) { id } }
逻辑说明
- 新建用户场景:用户 ID 为新生成的值,关联的 Feed ID 不存在,会正常执行 Feed 插入逻辑
- 用户已存在(Upsert 冲突)场景:尝试插入的 Feed ID 与已有 Feed 主键冲突,
update_columns: []配置会让 Hasura 跳过所有更新操作,既不会修改原有 Feed 数据,也不会生成新的 Feed 记录,完全匹配需求。
内容的提问来源于stack exchange,提问作者fokolo
相关产品推荐
相关产品推荐

