Prisma:具有三个引用可选字段的唯一索引字段的模型
Prisma: Model with three unique index fields referencing optional fields
我有一个关于具有可选值的唯一索引的问题。
我有这样的架构:
model Thread {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
body String
user User @relation(fields: [userId], references: [id])
userId Int
likes Like[] @relation("ThreadsOnLikes")
}
model Like {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id])
userId Int
thread Thread? @relation("ThreadsOnLikes", fields: [threadId], references: [id])
threadId Int?
comment Comment? @relation("CommentsOnLikes", fields: [commentId], references: [id])
commentId Int?
@@unique([userId, threadId, commentId])
}
在解析器中,我想删除用户对特定 threadId 的点赞,如下所示:
await db.thread.update({
where: { id: input.id },
data: {
likes: {
delete: {
userId_threadId_commentId: { userId: session.userId, threadId: input.id },
},
}
}
})
但是当我尝试执行该更改时,prisma 抛出以下错误:
Argument commentId for data.likes.delete.userId_threadId_commentId.commentId is missing.
当我将它添加到带有 , commentId: null 的 delete 参数时,它会指出此错误:
Argument commentId: Got invalid value null on prisma.updateOneThread. Provided null, expected Int.
尽管在数据库内部, comment_id 字段实际上是 null 。这是错误还是如何修复?
构成唯一约束的所有字段都必须是必填字段。以下模型无效,因为 id 可能为空:
model User {
firstname Int
lastname Int
id Int?
@@unique([firstname, lastname, id])
}
此行为的原因是所有连接器都认为空值是不同的,这意味着看起来相同的两行被认为是唯一的:
firstname | lastname | id
-----------+----------+------
John | Smith | null
John | Smith | null
我不确定为什么 Prisma 无法在“编译时”预先验证架构,这可能是一个错误,所以我建议您在 Github?
上创建一个问题
我有一个关于具有可选值的唯一索引的问题。 我有这样的架构:
model Thread {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
body String
user User @relation(fields: [userId], references: [id])
userId Int
likes Like[] @relation("ThreadsOnLikes")
}
model Like {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
user User @relation(fields: [userId], references: [id])
userId Int
thread Thread? @relation("ThreadsOnLikes", fields: [threadId], references: [id])
threadId Int?
comment Comment? @relation("CommentsOnLikes", fields: [commentId], references: [id])
commentId Int?
@@unique([userId, threadId, commentId])
}
在解析器中,我想删除用户对特定 threadId 的点赞,如下所示:
await db.thread.update({
where: { id: input.id },
data: {
likes: {
delete: {
userId_threadId_commentId: { userId: session.userId, threadId: input.id },
},
}
}
})
但是当我尝试执行该更改时,prisma 抛出以下错误:
Argument commentId for data.likes.delete.userId_threadId_commentId.commentId is missing.
当我将它添加到带有 , commentId: null 的 delete 参数时,它会指出此错误:
Argument commentId: Got invalid value null on prisma.updateOneThread. Provided null, expected Int.
尽管在数据库内部, comment_id 字段实际上是 null 。这是错误还是如何修复?
构成唯一约束的所有字段都必须是必填字段。以下模型无效,因为 id 可能为空:
model User {
firstname Int
lastname Int
id Int?
@@unique([firstname, lastname, id])
}
此行为的原因是所有连接器都认为空值是不同的,这意味着看起来相同的两行被认为是唯一的:
firstname | lastname | id
-----------+----------+------
John | Smith | null
John | Smith | null
我不确定为什么 Prisma 无法在“编译时”预先验证架构,这可能是一个错误,所以我建议您在 Github?
上创建一个问题