You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apollo创建消息时未返回关联对象问题咨询

问题:创建消息Mutation无法返回关联的User和Session对象

我编写了用于创建消息并关联User和Session的Mutation代码,以及对应的GraphQL TypeDef定义,但执行创建操作后,服务器日志输出仅包含基础字段,未返回关联的User和Session对象。


现有代码

Mutation 实现代码

Mutation: {
  createMessage: async (_, args) => {
    const x = await prisma.message.create({
      data: {
        message: args.message,
        user: {
          connect: {
            id: Number(args.userId)
          }
        },
        session: {
          connect: {
            id: Number(args.sessionId)
          }
        }
      }
    })
    console.log(x)
    return x
  },
},

GraphQL TypeDef 定义

type Message {
  id: ID,
  message: String
  user: User
}

type Mutation {
  createMessage(
    sessionId: ID!
    userId: ID!
    message: String!
  ): Message
}

执行结果日志

{ id: 23, message: 'This is a message!', userId: 100, sessionId: 6 }


解决方案

1. 修改Prisma查询,添加include选项

Prisma的create方法默认只会返回模型的基础字段,不会自动加载关联对象。需要在create配置中添加include属性,明确指定要返回的关联关系:

Mutation: {
  createMessage: async (_, args) => {
    const x = await prisma.message.create({
      data: {
        message: args.message,
        user: {
          connect: {
            id: Number(args.userId)
          }
        },
        session: {
          connect: {
            id: Number(args.sessionId)
          }
        }
      },
      // 新增include配置,指定要返回的关联对象
      include: {
        user: true,
        session: true
      }
    })
    console.log(x)
    return x
  },
},

2. 更新GraphQL TypeDef(若需要返回Session)

原TypeDef中的Message类型未定义session字段,如果需要在返回结果中包含Session对象,需要补充该字段:

type Message {
  id: ID,
  message: String
  user: User
  session: Session # 补充session字段,需确保已定义Session类型
}

type Mutation {
  createMessage(
    sessionId: ID!
    userId: ID!
    message: String!
  ): Message
}

3. 确保GraphQL查询请求包含关联字段

即使后端返回了关联对象,前端发起GraphQL请求时也需要明确指定要获取的关联字段,否则只会返回基础字段。示例查询:

mutation CreateMessage($sessionId: ID!, $userId: ID!, $message: String!) {
  createMessage(sessionId: $sessionId, userId: $userId, message: $message) {
    id
    message
    user { # 指定要获取的user关联字段
      id
      name
      # 其他需要的User字段
    }
    session { # 指定要获取的session关联字段
      id
      # 其他需要的Session字段
    }
  }
}

内容的提问来源于stack exchange,提问作者Peter Boomsma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 19:27:22