无法断开显式多对多的关系



我试图删除一些与组相关的用户。

模式如下:

model User {
id    String @id @default(cuid())
username String 
email String @unique
password String?
group GroupUser[]
}
model Group {
id    String @id @default(cuid())
name String
user GroupUser[]
}

model GroupUser{
userId String
user User @relation(fields: [userId],references: [id],onDelete: Cascade,onUpdate:Cascade)
groupId String
group Group @relation(fields: [groupId],references: [id],onDelete: Cascade,onUpdate: Cascade)
@@id([userId,groupId])
}

删除用户代码:

async deleteUsersFromGroup(id: string, userData: UpdateGroupDto): Promise<number> {
const deletedUsers = await prisma.group.update({
where: {
id: id,
},
data: {
user: { disconnect: /* trying to put the array of users id here */ },
},
});
return deletedUsers.length;

}

问题是,我想给断开连接的userID,但它要求我userId_groupId,这是关系键。

您需要从连接表中删除记录,即GroupUser

你可以尝试这样做:

await prisma.groupuser.delete({
where: {
userId_groupId: {
userId: 'userId',
groupId:'groupId'
}
}
});

如果连接的记录被删除,那么两个实体将被断开连接。

因为我想同时删除多个用户,所以我使用了userId内部的map函数,诉诸于prism . groupuser .delete()。

async deleteUsersFromGroup(id: string, userData: DeleteGroupDto): Promise<any> {


const response = await prisma.groupUser.deleteMany({
where: {
groupId: id,
userId: { in: userData.users.map(user => user.userId) },
},
});

return response.count
}

最新更新