跳至内容

Prisma 模式

Prisma 模式文件是 Prisma 的主要配置文件。它通常命名为 schema.prisma,并包含以下部分

数据源

数据源确定 Prisma 如何连接到您的数据库,并在您的 Prisma 模式文件中用 datasource 块表示。以下是用 postgresql 作为数据库并包含硬编码连接字符串的数据源示例

prisma
generator client {
  provider = "dart run orm"
}

datasource db { 
  provider = "postgresql"
  url      = "postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public"
} 

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}

生成器

Prisma 模式可以有一个或多个生成器,用 generator 块表示

prisma
generator client { 
  provider = "dart run orm"
} 

datasource db {
  provider = "postgresql"
  url      = "postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public"
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
}

提示

关于更多生成器,请参阅 👉 生成器

Prisma Dart 客户端:dart run orm

当您决定在您的 Dart 项目中使用 Prisma 时,您需要在 generator 中将 provider 指定为 dart run orm,以便 Prisma 可以为您生成 Dart 代码。

prisma
generator client {
  provider = "dart run orm"
}

输出目录

  • output:生成的 Dart 代码将写入到的目录。默认为 ./generated_dart_client/

相对路径相对于 Prisma 模式文件的目录解析。

更改输出目录

prisma
generator client {
  provider = "dart run orm"
  output   = "../lib/src/generated/prisma_client"
}

数据模型

数据模型定义数据库表的结构。它们由 model/view/enum 块组成。

提示

以下部分仅作简单介绍。有关从数据模型派生的更多内容,请参阅 👉 数据模型

模型

模型在您的 Prisma 模式文件中用 model 块表示。这是一个 User 模型的示例

prisma

model User { 
  id    Int     @id @default(autoincrement()) 
  email String  @unique
  name  String?
  role  Role    @default(USER) 
} 

view UserDetail {
  id    Int
  name  String?
  postsCount Int
}

enum Role {
  USER
  ADMIN
}

视图

视图在您的 Prisma 模式文件中用 view 块表示。这是一个 UserDetail 视图的示例

prisma
model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  role  Role    @default(USER)
}

view UserDetail { 
  id    Int
  name  String?
  postsCount Int
} 

enum Role {
  USER
  ADMIN
}

危险

view 目前是预览功能,不应在生产环境中使用。Prisma Dart 客户端无法保证 view 的正确性。

关于更多视图,请参阅 👉 视图

枚举

枚举在您的 Prisma 模式文件中用 enum 块表示。这是一个 Role 枚举的示例

prisma
model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  role  Role    @default(USER) 
}

view UserDetail {
  id    Int
  name  String?
  postsCount Int
}

enum Role { 
  USER 
  ADMIN 
} 

更多

关于更多数据源,请参阅 👉 Prisma 数据源 官方文档。

在 BSD-3-Clause 许可证下发布