对 Prisma 模式使用 @map 和 @@map

Use of @map and @@map for Prisma schema

我是 Prisma 的新手,一直想知道 Prisma 模式的 @map 和 @@map 有什么用?我看过他们的网站:https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#map 但仍然没有完全理解@map 和@@map 的用途。

据我所知,如果我有类似 姓氏字符串 @map("last_name") @db.VarChar(256) 它将“last_name”映射到姓氏?但是我不太确定什么时候需要这个。

谢谢!感谢任何帮助。

Maps a field name or enum value from the Prisma schema to a column or document field with a different name in the database

一个用例可能是人们将现有数据库与 prisma 集成,并希望在数据库和 prisma 客户端之间使用不同的命名约定。

例如,一个人可能对数据库列使用 snakecase,但想对 prisma 客户端使用 camelcase,那么他们会这样做:

model User {
  createdAt String @map("created_at")
}

与@@map 相同,但仅用于 table 名称。

来自 prisma 的详细指南:
https://www.prisma.io/docs/concepts/components/prisma-client/working-with-prismaclient/use-custom-model-and-field-names

@map 可用于为您的列名分配不同的名称,例如,如果数据库中 table 的列名是 userLastName 但您想分配不同的名称 (user_last_name) 并在生成的 PrismaClient 中使用不同的名称访问它,您可以使用 @map 属性。

model User {
  id        Int    @id @default(autoincrement())
  userLastName String @map("user_last_name")
}
  • @map不重命名数据库中的列/字段
  • @map 确实更改了生成的 prisma 客户端中的字段名称

另一方面,@@map 用于为模型而不是特定字段分配不同的名称。因此,例如,如果 table 名称是 UserDetails,并且您想在生成的客户端中将其作为 user_details 访问,您可以使用 @@map 属性。

model UserDetails {
  id   Int    @id @default(autoincrement())
  name String

  @@map("users_details")
}