问题描述
我有这个查询,其中 messageTags
是 messages
和 tags
之间多对多关系的连接表
messageTagsByMessageId {
__id
edges {
node {
tagId
tagByTagId {
id
name
}
}
}
}
我想运行 deleteTag
突变,并使用 Relay 的 @deleteEdge
自动更新连接。问题是变异返回 id
,而不是 tagId
或 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;
解决方法
我所做的是在图形中为连接表创建一个函数。这在该表上提供了一个突变。
然后我只是将两个突变合二为一。一个更新直接连接的连接,另一个更新关系:
mutation TagDeleteTagMutation($tag:DeleteTagInput!,$messageTag:DeleteMessageTagInput!,$connections: [ID!]!) {
deleteMessageTag(input: $messageTag) {
messageTag {
id @deleteEdge(connections: $connections)
}
}
deleteTag(input: $tag) {
tag {
id @deleteEdge(connections: $connections)
}
}
}