Yaakov
05/10/2022, 12:04 AMawait prisma.user.update({
where: { id: 1 },
data: {
userRoles: {
deleteMany: {
where: {
role: {
type: 'SOME_ROLE',
},
},
},
},
},
})Nurul
05/10/2022, 7:19 AMYaakov
05/10/2022, 12:31 PMmodel User {
id Int @id @default(autoincrement())
userRoles UserRoles[] @relation("UserRelation")
}
model Role {
id Int @id @default(autoincrement())
type String
users UserRoles[] @relation("RoleRelation")
}
model UserRoles {
id Int @id @default(autoincrement())
user_id Int
user User @relation("UserRelation", fields: [user_id], references: [id])
role_id Int
role Role @relation("RoleRelation", fields: [role_id], references: [id])
}Yaakov
05/10/2022, 12:33 PMNurul
05/11/2022, 8:32 AMYaakov
05/11/2022, 12:20 PMYaakov
05/11/2022, 12:35 PMawait prisma.$transaction([
prisma.userRoles.deleteMany({
where: {
user_id: 1,
role: { type: 'SOME_ROLE' },
},
}),
prisma.user.update({
where: { id: 1 },
data: {
userRoles: {
create: {
role: { connect: { name: 'Supervisor' } },
},
},
},
}),
]);
I have 2 issues with this implementation:
1. It is using 2 separately written queries wrapped inside a transaction.
2. The first query hits the userRoles table directly rather than joining from the user. Mapping tables are usually not queried this way.