小编Jos*_*ana的帖子

如何在没有 ID 的情况下在 Prisma 中插入新记录?

我使用 Prisma ( https://www.prisma.io ) 作为 ORM。我想在存储数据时检查重复项,如果不存在,则创建一个新记录。

我以为我可以使用 Prisma 提供的 upsert 方法来做到这一点,并且可以在生成的客户端中使用,但是该方法的 where 子句仅适用于 id(或 @unique 字段),但是如果记录不存在,则没有要提供的任何 ID。

我提供了一个问题的例子。

数据模型.prisma

type System {
  id: ID! @unique
  performances: [SystemPerformance!]! @relation(name: "PerformanceBySystem" onDelete: CASCADE)
  name: String! @unique
}

type SystemPerformance {
  id: ID! @unique
  system: System! @relation(name: "PerformanceBySystem")
  date: DateTime!
  perf1: Float
  perf2: Float
}
Run Code Online (Sandbox Code Playgroud)

种子.js

const { prisma } = require('./generated/prisma-client');
async function main(){
  await prisma.createSystem({
    name: 's1',
  });
  await prisma.createSystem({
    name: 's2',
  });
  await prisma.createSystem({
    name: 's3',
  });
}
main(); …
Run Code Online (Sandbox Code Playgroud)

node.js prisma prisma-graphql

9
推荐指数
2
解决办法
5399
查看次数

将 prisma 对象通过上下文传递给解析器更好还是直接使用它更好?

我想知道直接在解析器中使用 prisma 客户端或通过上下文传递它是否更好或者有什么区别。

在官方文档中它是通过上下文传递的:

const { prisma } = require('./generated/prisma-client');

const resolvers = {
  Query: {
    feed: (parent, args, context) => {
      return context.prisma.posts({ where: { published: true } })
    }
}

const server = new GraphQLServer({
  typeDefs: './src/schema.graphql',
  resolvers,
  context: {
    prisma,
  },
})
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么 prisma 客户端不直接在解析器中使用。

const { prisma } = require('./generated/prisma-client');

const resolvers = {
  Query: {
    feed: (parent, args, context) => {
      return prisma.posts({ where: { published: true } })
    }
}

const server = new …
Run Code Online (Sandbox Code Playgroud)

graphql apollo-server prisma prisma-graphql

4
推荐指数
1
解决办法
1843
查看次数

标签 统计

prisma ×2

prisma-graphql ×2

apollo-server ×1

graphql ×1

node.js ×1