graphql 突变不返回嵌套字段

Posted

技术标签:

【中文标题】graphql 突变不返回嵌套字段【英文标题】:graphql mutation dosen't return nesetd fields 【发布时间】:2020-02-25 02:21:06 【问题描述】:

如何在保留类型名称的同时从突变中返回嵌套字段

我在后端使用 prismagraphql-yoga

async createComment(parent, args, ctx, info) 
    console.log(args);
    const comment = await ctx.db.mutation.createComment(
      
        data: 
          ...args,
          user: 
            connect: 
              id: ctx.request.userId
            
          ,
          item: 
            connect: 
              id: args.itemId
            
          
        
      ,
      info
    );

    console.log(comment);

    ctx.pubsub.publish('PUBSUB_NEW_COMMENT',  newComment: comment );

    return comment;
 

在我的情况下,突变响应剂量返回嵌套字段 useritemnull

【问题讨论】:

你返回调用ctx.db.mutation.createComment的“结果”,我们需要看看这个函数。 您确认useritem 是否真的在评论中设置? connect 中传递的 id 可能未定义或不正确。 我确实通过在客户端 xD 上的 gql 中添加用户和项目字段来解决这个问题,更改也会影响发送到订阅的有效负载 【参考方案1】:

我确实通过将itemuser 字段添加到客户端中的gql 突变来解决这个问题

const COMMENT_MUTATION = gql`
  mutation COMMENT_MUTATION($text: String, $itemId: String) 
    createComment(text: $text, itemId: $itemId) 
      id
      text
      user  // adding user field here
        id
        name
      
      item  adding item field here
        id
        title
        user 
          id
          name
        
      
    
  
`;

我不明白这是怎么发生的,但因为它也会影响服务器上的订阅负载 基本上从 gql 突变中添加或删除字段也会改变去订阅的有效负载

【讨论】:

以上是关于graphql 突变不返回嵌套字段的主要内容,如果未能解决你的问题,请参考以下文章

在 Graphcool / GraphQL 中发布更新突变时如何“更新”数组/嵌套字段?

嵌套资源上的 GraphQL 突变

如何处理 GraphQL 中的嵌套输入

Apollo / GraphQL / Prisma“登录”突变不会返回所有用户字段

AWS放大graphql突变:不能为不可为空的字段返回null

GraphQL 突变为嵌套响应返回 null