在单个解析器中一次创建两种类型的数据 (Graphql + Prisma)

Posted

技术标签:

【中文标题】在单个解析器中一次创建两种类型的数据 (Graphql + Prisma)【英文标题】:Creating two types of data at once in a single resolver (Graphql + Prisma) 【发布时间】:2020-10-18 05:53:54 【问题描述】:

当用户创建 Post 类型的数据时,我还需要 graphql 服务器自动创建 Commit 类型的数据。 Commit 类型连接到 User 类型和 Post 类型。这是 User 类型、Post 类型和 Commit 类型的 graphql 模式:

type User 
  id: ID!
  username: String!
  commits: [Commit!]!


type Post 
  id: ID!
  title: String!
  content: String
  commits: [Commit!]!


type Commit 
  id: ID!
  user: User!
  post: Post!

所以我做了一个 createPost 突变。 createPost 突变必须同时完成两项工作:创建 Post,然后创建 Commit。 Commit 数据应该连接到新创建的 Post 数据。以下是我到目前为止想出的解析器:

Mutation: 
  createPost: async (_, args) => 
    const user, title, content = args;
    await prisma.createPost(
      title,
      content
    );
    const postId = await prisma.post(title).id();
    await prisma.createCommit(
      user: connect: id: user.id,
      post: connect: id: postId 
    );
    const newPost = await prisma.post(id:postId);
    return newPost;
  

这是一种有效的方法吗?或者有更好的方法吗?

【问题讨论】:

【参考方案1】:

我认为这也可以:

Mutation: 
  createPost: async (_, args) => 
    const user, title, content = args;
    const post = await prisma.createPost(
      title,
      content
    );
    await prisma.createCommit(
      user: connect: id: user.id,
      post: connect: id: post.id 
    );
    return post;
  

Prisma 返回创建的记录,因此您无需再次查询。

【讨论】:

以上是关于在单个解析器中一次创建两种类型的数据 (Graphql + Prisma)的主要内容,如果未能解决你的问题,请参考以下文章

Boost.Graph - 有 2 个简单的类和一个类 - 数据类型如何创建图表?

是否可以将多个管道组合到 Neuraxle 或 sklearn 中的单个估计器中以创建多输出分类器并一次性适应

在单个视图中一次缩放和平移两个图像

Anylogic:在汇编程序块中一次组装多个代理

根据其他字段的计算,在 pandas 数据框中一次创建两个新字段

如何在 GraphQL 突变/解析器中为每个用户创建和停止唯一的计时器