【发布时间】:2021-12-04 11:09:11
【问题描述】:
我有一组针对皮肤问题的复选框。用户可以在提交前勾选/取消勾选,也就是说每次提交的皮肤问题集可能都不一样。
我在 Prisma 模式中将其建模为“显式”多对多关系。
model User {
id String @id @default(cuid())
name String?
nickname String? @unique
...
skinConcerns SkinConcernsForUsers[]
...
}
model SkinConcern {
id Int @id @default(autoincrement())
name String @unique
user SkinConcernsForUsers[]
}
model SkinConcernsForUsers {
user User @relation(fields: [userId], references: [id])
userId String
skinConcern SkinConcern @relation(fields: [skinConcernId], references: [id])
skinConcernId Int
@@id([userId, skinConcernId])
}
然后,使用 prisma.skinConcern.createMany 为 SkinConcerns 表播种以下值:
"ACNE",
"DRYNESS",
"OILY_SKIN",
"PIGMENTATION",
"REDNESS",
"WRINKLES",
SkinConcerns 在更新变异输入中以字符串数组的形式出现,例如["PIGMENTATION", "REDNESS"].
我想通过 prisma.user.update 查询为用户 (SkinConcernsForUsers) 更新皮肤问题,但这很棘手,因为我不仅要创建 SkinConcerns,而且还必须连接到现有的皮肤问题集。
我试过直接setting skinConcerns in user,喜欢
await prisma.user.update({
where: { nickname },
data: {
// ... other user data
skinConcerns: {
set: [
{
skinConcern: {
connect: { name: "PIGMENTATION" },
},
},
{
skinConcern: {
connect: { name: "REDNESS" },
},
},
],
},
// ... other user data
}
});
在许多其他事情中,但这当然不是一个正确的论点,并且会因错误而失败
Unknown arg `connect` in data.skinConcerns.update.0.where.connect for type SkinConcernsForUsersWhereUniqueInput. Did you mean `select`?
Argument data for data.skinConcerns.update.0.data is missing.
Unknown arg `connect` in data.skinConcerns.update.1.where.connect for type SkinConcernsForUsersWhereUniqueInput. Did you mean `select`?
Argument data for data.skinConcerns.update.1.data is missing.
有没有办法做到这一点?甚至可以在prisma.user.update 中更新它吗?
我想我可以直接更新SkinConcernsForUsers。在这种情况下,我是否应该删除与用户关联但不在用户输入["PIGMENTATION", "REDNESS"] 中的所有行,然后创建不存在的行?它在棱镜代码中会是什么样子?
【问题讨论】:
标签: prisma