如何在 prisma 中使多个字段的唯一键约束不区分大小写?

问题描述 投票:0回答:1

谁能告诉我如何使这个独特的约束不区分大小写?我看起来像

@@unique([name, size, color], options:{caseInsensitive: true})

我使用的是 prisma 客户端版本:5.4.1

model SomeModel {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  name      String 
  size      String 
  color     String

  @@unique([name, size, color])
}

或者有什么方法可以在 prisma 更新查询期间检查不区分大小写,如下所示?

await prisma.update.SomeModel({
  where: {
    name_size_color: {
      name: data.name? {equals: data.name, mode: "insensitive"},
      size: data.size? {equals: data.size, mode: "insensitive"},
      color: data.color? {equals: data.color, mode: "insensitive"}
    } 
  },
  data: someData
});

当我尝试 prisma 更新时,每个字段都发生以下错误: 参数

color
:提供的值无效。预期为字符串,提供了对象。

注意:在我的例子中,名称、大小或颜色的值可以为 null 或空字符串或字符串。

postgresql prisma unique-constraint
1个回答
0
投票

自版本 5.4.1 起,Prisma 不支持直接在模式中定义不区分大小写的唯一约束,不过,您可以通过使用 contains 过滤器以及自定义 SQL 函数来执行操作来处理应用程序中不区分大小写的情况。

const result = await prisma.someModel.update({
  where: {
    name_size_color: {
      name: { contains: { value: data.name, mode: 'insensitive' } },
      size: { contains: { value: data.size, mode: 'insensitive' } },
      color: { contains: { value: data.color, mode: 'insensitive' } },
    },
  },
  data: someData,
});

}

这可能不如数据库中真正的不区分大小写的唯一约束那么有效,但它提供了一种解决方法,直到 Prisma 引入对不区分大小写的约束的内置支持。

© www.soinside.com 2019 - 2024. All rights reserved.