【问题标题】:PostGraphile deleteEdge with many to many relationPostGraphile deleteEdge 具有多对多关系
【发布时间】:2021-09-08 06:19:17
【问题描述】:

我有这个查询,其中messageTagsmessagestags 之间的多对多关系的连接表

messageTagsByMessageId {
    __id
    edges {
        node {
            tagId
            tagByTagId {
                id
                name
            }
        }
    }
}

我想运行 deleteTag 突变,并使用 Relay 的 @deleteEdge 自动更新连接。问题是突变返回id,而不是tagIdtagByTagId.id

我试着开箱即用:

mutation TagDeleteMutation($input:DeleteTagInput!, $connections: [ID!]!) {
  deleteTag(input: $input) {
    tag {
      id @deleteEdge(connections: $connections)
    }
  }
}

我还尝试添加开箱即用的有效负载:

mutation TagDeleteMutation($input:DeleteTagInput!, $connections: [ID!]!) {
  deleteTag(input: $input) {
    tag {
      id @deleteEdge(connections: $connections)
    }
    messageTag {
      tagId @deleteEdge(connections: $connections)
    }
  }
}

运气不好。现在我正在研究 graphile 用来构建突变 API 的 Postgres 函数。比如:

CREATE FUNCTION public.delete_tag(tag_id Int)
RETURNS *
AS $$
  DELETE FROM public.tag
    WHERE id=tag_id
  RETURNING id, user_id, name, category_id, id as tag_id;
$$ LANGUAGE sql VOLATILE STRICT;

【问题讨论】:

    标签: postgresql graphql relay postgraphile


    【解决方案1】:

    我所做的是在图形中为连接表创建一个函数。这会在该表上提供一个突变。

    然后我只是将两种突变合二为一。一个更新直接连接的连接,另一个更新关系:

    mutation TagDeleteTagMutation($tag:DeleteTagInput!, $messageTag:DeleteMessageTagInput!, $connections: [ID!]!) {
        deleteMessageTag(input: $messageTag) {
            messageTag {
              id @deleteEdge(connections: $connections)
          }
        }
        deleteTag(input: $tag) {
          tag {
            id @deleteEdge(connections: $connections)
          }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多