PostGraphile deleteEdge 具有多对多关系

Posted

技术标签:

【中文标题】PostGraphile deleteEdge 具有多对多关系【英文标题】:PostGraphile deleteEdge with many to many relation 【发布时间】: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;

【问题讨论】:

【参考方案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(在其自己的容器中)自动生成时,如何将中继编译器作为离线构建步骤运行?

Delete Edges

如何学习摸具设计?怎样学习摸具设计?学习摸具设计的方法。