Prisma:使用“where”和非唯一字段进行更新?

Xen*_*mar 7 node.js typescript prisma

在检查 Prisma ORM 中更新方法的类型时,我发现只能包含唯一字段的 where 子句:

return this.prisma.publication.update({
    data,
    where: {id},
});
Run Code Online (Sandbox Code Playgroud)

我很乐意将其与身份验证结合起来并执行以下操作:

return this.prisma.publication.update({
    data,
    where: {id, owner: user.id}, <-- Authorisation
});
Run Code Online (Sandbox Code Playgroud)

这对于 Prisma 来说是可能的吗?或者我是否需要一个单独的查询来检索实例?

Rya*_*yan 10

在这种情况下,您需要使用updateMany,因为您将非唯一字段与唯一字段一起使用。

  • 哇,这太恶心了。因此,即使您传递了唯一的参数并且知道它只会更新一个/无记录,您仍然需要执行 updateMany 。 (7认同)

小智 6

显然,从 Prisma 版本 4.5.0 开始,有一项新功能允许您将非唯一字段添加到唯一 where 子句,只要它至少包含一个唯一字段即可。

Prisma 现实 4.5.0

这是一个预览功能,因此为了启用它,请将其添加到您的 shcema.prisma 中:

generator js {
  provider        = "prisma-client-js"
  previewFeatures = ["extendedWhereUnique"]
}
Run Code Online (Sandbox Code Playgroud)

然后您的代码示例就会起作用。

return this.prisma.publication.update({
  data,
  where: {id, owner: user.id},
});
Run Code Online (Sandbox Code Playgroud)