0

我有这个查询,哪里是和messageTags之间的多对多关系的连接表messagestags

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

我想运行一个deleteTag突变,并使用中继@deleteEdge自动更新连接。问题是突变返回id,而不是tagIdor tagByTagId.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;
4

1 回答 1

0

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

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

mutation TagDeleteTagMutation($tag:DeleteTagInput!, $messageTag:DeleteMessageTagInput!, $connections: [ID!]!) {
    deleteMessageTag(input: $messageTag) {
        messageTag {
          id @deleteEdge(connections: $connections)
      }
    }
    deleteTag(input: $tag) {
      tag {
        id @deleteEdge(connections: $connections)
      }
    }
}
于 2021-06-25T01:02:08.013 回答