PostGraphile deleteEdge 具有多对多关系
Posted
技术标签:
【中文标题】PostGraphile deleteEdge 具有多对多关系【英文标题】:PostGraphile deleteEdge with many to many relation 【发布时间】:2021-09-08 06:19:17 【问题描述】:我有这个查询,其中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;
【问题讨论】:
【参考方案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)
【讨论】:
以上是关于PostGraphile deleteEdge 具有多对多关系的主要内容,如果未能解决你的问题,请参考以下文章
Postgraphile + express + jwt 正在抛出“未找到授权令牌”,即使 graphiql 有效
AWS 弹性 beantalk 上的 postgraphile 出现 408 超时错误
PostgreSQL / PostGraphile行权限不起作用
当我的 GraphQL 架构在运行时由 postgraphile(在其自己的容器中)自动生成时,如何将中继编译器作为离线构建步骤运行?