我有一个关系表,它基本上将用户映射到一个问题(Jira 问题),我试图找到一种干净的方法来管理和更新这些关系与 PUT 调用。我暂时想出了一个可行的解决方案,但我觉得 Prisma 2 必须有更好的方法。
因此,当我从前端发出 PUT 请求时,它会返回一个用户 ID 数组
const userIds = [ 1 ]
。
我想要发生的是当我调用这个 PUT 请求时,我可以将用户 ID 数组传递给它,然后如果用户 ID 在该数组中不存在,Prisma 将删除任何现有的数据库条目,如果不存在则userids
添加任何新条目已经存在于数据库中。
一个简单的例子是:
- 在数据库中,我有用户 id
1
和2
- 我的 PUT 请求
[2, 3]
发送userIds
- 当我调用 Prisma 时,它会被删除,
1
因为它不存在于userIds
数组中 - 然后它为用户添加一个新条目,
3
因为它在userIds
数组中并且在数据库中不存在
这似乎是一些非常简单的功能,但我现在可以解决这个问题的唯一方法是删除与问题相关的所有记录(Jira Ticket),然后为userIds
数组中存在的所有 ID 重新添加新记录。这不是很高效(超出原则),并且当我的应用程序变得更复杂时可能会导致问题。
这是我现在如何做的代码:
const oldIssue = await prisma.issue.findUnique({
where: { id: +req.params.issueId },
include: { userIds: true }
})
try {
await prisma.issueUsersUser.deleteMany({
where: { issueId: oldIssue?.id }
})
const issue = await prisma.issue.update({
where: { id: +req.params.issueId },
data: {
...data,
userIds: {
createMany: {
data: userIds.map((userId: string) => ({ userId }))
},
}
}
})
return res.json(issue)
}
...
我只是想知道是否有一种方法可以在不需要删除该问题的每条记录的情况下执行相同的功能。理想情况下,它只会删除数组中缺少的记录,只添加尚不存在的记录。
谢谢!