【问题标题】:How to write equivalent of SQL MERGE statement using Prisma?如何使用 Prisma 编写等效的 SQL MERGE 语句?
【发布时间】:2021-12-15 03:40:28
【问题描述】:

我有一个接受帖子标签列表的 GraphQL 突变。 PostTag 模型是:

model PostTag {
  id        BigInt          @id @default(autoincrement())

  order     Int
  value     String

  post      Post            @relation(fields: [postId], references: [id])
  postId    BigInt          @map("post_id")
  

  @@map("post_tag")
}

我的 REST API 是 PUT /posts/{postId}/tags,它接收要根据给定 Post 更新的标签列表。在这个列表中,一些标签可能有id,这意味着它是一个应该更新的现有tag 项目。会有tag 的项目没有id 的意思,应该是新添加的。给定帖子缺少标签意味着应该删除这些标签。

我可以使用 SQL 合并语句来做到这一点。我想使用 Prisma 获得类似的结果。如何使用 Prisma 有效地做到这一点?

【问题讨论】:

    标签: sql prisma prisma2


    【解决方案1】:

    在撰写本文时,没有与 merge 声明等效的内容。使用两个查询的解决方法如下:

    1. 删除现有的PostTag 记录,该记录使用deleteMany 连接到特定的Post
    2. 根据从带有createMany 的API 端点接收的数据创建新的PostTag 记录。

    最好将查询 1 和 2 包装在 transaction 中,以确保数据库不处于不一致状态。

    这不如merge 命令优化。如果您特别需要灵活性和性能,请考虑在 prisma 存储库中创建 feature request 提及您的用例。

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 2022-08-15
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      相关资源
      最近更新 更多