我的架构如下:
model Player {
id String @id @default(auto()) @map("_id") @db.ObjectId
steam_id String @unique
name String
level Int @default(1)
elo Float @default(1500)
games Game[] @relation(fields: [game_ids], references: [id])
game_ids String[] @db.ObjectId
clients Client[]
user User? @relation(fields: [user_id], references: [id])
user_id String? @db.ObjectId @unique
created_at DateTime @default(now())
updated_at DateTime @updatedAt
@@map("players")
}
如您所见,user_id 是一个可选字段。然而,该关系要求将其标记为唯一。这样做时,我收到以下错误:重复键 { user_id: null }
我在这里能做什么?
这是目前Prisma不支持的场景。
有一个长期讨论/功能请求,您可以在此处查看。引用该问题:
[..] 我认为我们还不支持这一点的原因是因为 Postgres 是我们支持的唯一以这种方式运行的数据库,其他数据库拒绝重复的 NULL。
我的解决方法是删除唯一约束并检查代码:如果
user_id
为非空,则查询数据库以查看该值是否已存在。如果是,则拒绝插入。