如何使用 Prisma 编写等效的 SQL MERGE 语句?
Posted
技术标签:
【中文标题】如何使用 Prisma 编写等效的 SQL MERGE 语句?【英文标题】:How to write equivalent of SQL MERGE statement using Prisma? 【发布时间】: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 有效地做到这一点?
【问题讨论】:
【参考方案1】:在撰写本文时,没有与 merge
声明等效的内容。使用两个查询的解决方法如下:
-
删除现有的
PostTag
记录,该记录使用deleteMany
连接到特定的Post
。
根据从带有createMany
的API 端点接收的数据创建新的PostTag
记录。
最好将查询 1 和 2 包装在 transaction 中,以确保数据库不处于不一致状态。
这不如merge
命令优化。如果您特别需要灵活性和性能,请考虑在 prisma 存储库中创建 feature request 提及您的用例。
【讨论】:
以上是关于如何使用 Prisma 编写等效的 SQL MERGE 语句?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 oracle 数据库中为具有复杂聚合的数据透视编写等效的 sql 查询?
NestJS-Prisma,如何编写与 prisma 一对多类型匹配的 DTO
如何使用 Prisma 为 Postgres 进行 SQL 插入,条件是行数?
在 WHERE 子句中使用函数编写 SQL SELECT 语句是不是有 Django 等效项?